2017-01-27 10 views
1

**
параметры залпа (company_id & & branch_id)
равна нулю, хотя я получил свои реальные данные, прежде чем через MyRequestQueue_Company поэтому вызывает залп ответ NullPointer исключение
Почему эти две строки (company_id & branch_id) равны нулю в MyRequestQueue_Drivers?

Почему company_id и branch_id равны null в MyRequestQueue_Drivers? Как я могу это решить?

public class CheckinActivity extends AppCompatActivity implements AdapterView.OnItemSelectedListener { 

      String company_id, branch_id; 
      Spinner driver_name_spinner; 
      private String User_URL = "http://example.com/api/user?token="; 
      private String Drivers_URL = "http://example.com/api/getDrivers?company_id=1&branch_id=15"; 

      @Override 
      protected void onCreate(Bundle savedInstanceState) { 
       super.onCreate(savedInstanceState); 
       setContentView(R.layout.activity_checkin); 

       driver_name_spinner = (Spinner) findViewById(R.id.driver_name_spinner); 

       next = (Button) findViewById(R.id.next); 

       SharedPreferences sharedPref = getSharedPreferences("userinfo", getApplicationContext().MODE_PRIVATE); 
       final String token = sharedPref.getString("token", ""); 
       final RequestQueue MyRequestQueue_Company = Volley.newRequestQueue(this); 


    // GET COMPANY_ID AND BRANCH_ID FORM API 


       StringRequest MyStringRequest_Company = new StringRequest(Request.Method.GET, User_URL + token, new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         Log.d("response", response); 

         try { 
          JSONObject jsono = null; 
          jsono = new JSONObject(response); 
          JSONObject jarray = jsono.getJSONObject("user"); 
          company_id = jarray.getString("company_id"); 
          branch_id = jarray.getString("branch_id"); 

          Log.d("User Data", "company_id " + company_id + "\tbranch_id " + branch_id); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 

        } 
       }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately. 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         //This code is executed if there is an error. 
        } 
       }); 
       MyRequestQueue_Company.add(MyStringRequest_Company); 

     // CALL ANOTHER WEBSERVICES TO GET DRIVERS DATA 

       RequestQueue MyRequestQueue_Drivers = Volley.newRequestQueue(getApplicationContext()); 
       StringRequest MyStringRequest_Drivers = new StringRequest(Request.Method.POST, Drivers_URL, new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 
         Log.d("Drivers Response", response); 
         try { 
          JSONObject jsono = null; 
          jsono = new JSONObject(response); 
          JSONArray jarray = jsono.getJSONArray("Drivers"); 
          List<String> drivers; 
          drivers = new ArrayList<String>(); 
          for (int i = 0; i < jarray.length(); i++) { 
           JSONObject newobject = jarray.getJSONObject(i); 
           driver_name_txt = newobject.getString("name"); 
           Log.d("Driver Name", driver_name_txt); 

           drivers.add(driver_name_txt); 
          } 
          ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(getBaseContext(), android.R.layout.simple_spinner_item, drivers); 
          dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
          driver_name_spinner.setAdapter(dataAdapter); 

         } catch (JSONException e) { 
          e.printStackTrace(); 
         } 
        } 
       }, new Response.ErrorListener() { //Create an error listener to handle errors appropriately. 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         Log.d("Drivers Error",error.toString()); 
        } 
       }) { 
        protected Map<String, String> getParams() { 
         Map<String, String> MyData = new HashMap<String, String>(); 

    // BRANCH_ID AND COMPANY_ID ARE EQUAL NULL !? 
         MyData.put("branch_id", branch_id); 
         MyData.put("company_id", company_id); 
         Log.d("Last User Data", "company_id " + company_id + "\tbranch_id " + branch_id); 


         return MyData; 
        } 
       }; 
       MyRequestQueue_Drivers.add(MyStringRequest_Drivers); 

       driver_name_spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
        @Override 
        public void onItemSelected(AdapterView<?> parent, View view, int position, long l) { 

         TextView tmpView = (TextView) driver_name_spinner.getSelectedView().findViewById(android.R.id.text1); 
         tmpView.setTextColor(Color.WHITE); 
         driver_name_txt = parent.getItemAtPosition(position).toString(); 
         Log.d("driver_name_original", driver_name_txt); 
        } 

        @Override 
        public void onNothingSelected(AdapterView<?> adapterView) { 

        } 
       }); 
+0

Вы используете Volley, запрос которого заканчивается первым? Вы это проверили? – Kyrmyzyanik

+0

Да, я проверил. Сначала MyRequestQueue_Company заканчивается, и журнал «Данные пользователя» правильно получает данные. –

+0

Вы нашли ответ на свой вопрос? – bendaf

ответ

0

Если вы хотите использовать функцию getParams, чем я хотел бы предложить, чтобы определить флаг и изменить функции, как:

   @Override 
       public void onResponse(String response) { 
        Log.d("response", response); 

        try { 
         JSONObject jsono = null; 
         jsono = new JSONObject(response); 
         JSONObject jarray = jsono.getJSONObject("user"); 
         company_id = jarray.getString("company_id"); 
         branch_id = jarray.getString("branch_id"); 

         Log.d("User Data", "company_id " + company_id + "\tbranch_id " + branch_id); 
         requestFinished = true; 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 

       } 

И ваши getParams будет выглядеть так:

   protected Map<String, String> getParams() { 
        if(!requestFinished) return null; 
        Map<String, String> MyData = new HashMap<String, String>(); 

// BRANCH_ID AND COMPANY_ID ARE EQUAL NULL !? 
        MyData.put("branch_id", branch_id); 
        MyData.put("company_id", company_id); 
        Log.d("Last User Data", "company_id " + company_id + "\tbranch_id " + branch_id); 


        return MyData; 

Но я бы предложил вам вместо этого использовать Observer pattern.

 Смежные вопросы

  • Нет связанных вопросов^_^