2017-12-05 15 views
-1

ボレーライブラリを使用してWebサービスからデータを取得していますが、ボレー応答でデータを取得すると別のアクティビティに移動したいので、接続応答があるまで待機します。 AsyncTaskを使用して、転送関数を実行後に置くと、2番目のアクティビティはlog catで見たように受信したデータを開始します。私がボレーの中に伝達関数を入れたときOnResponse活動が凍っている。だから、どのように応答を取得し、データを保存し、それを使用する別のアクティビティに移動するまで待つことができます。AsyncTaskでボレー応答後のアンドロイドコール関数

public class Loading_Car_info extends AppCompatActivity { 

    String appUrl="https://darialkndari5.000webhostapp.com/read_info.php"; 
    String user_id,name,v_date,v_no,qr_code; 
    String[] phaths; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_loading__car_info); 
     Bundle b=this.getIntent().getExtras(); 
     MyAsyncTask m=new MyAsyncTask(); 
     m.execute(); 

     } 
    public void transfer() 
    { 

     Bundle b=new Bundle(); 
     b.putStringArray("paths", phaths); 
     b.putString("name","hi"); 
     b.putString("v_dat","hello"); 
     b.putString("v_no","rrr"); 
     b.putString("qr_code",qr_code); 

     Intent intent=new Intent(this,User_Info.class); 
     intent.putExtras(b); 
     startActivity(intent); 
    } 

    public class MyAsyncTask extends AsyncTask<Void, Void, Void> { 
     @Override 
     protected void onPreExecute() { 
      //UI Interaction 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 


       StringRequest stringRequest = new StringRequest(Request.Method.POST, appUrl, new Response.Listener<String>() { 
        @Override 
        public void onResponse(String response) { 

         boolean move=false; 


         phaths=new String[response.length()]; 

         try { 

          JSONObject jsnobject = new JSONObject(response); 
          JSONArray jsonArray = jsnobject.getJSONArray("ads"); 
          for (int i = 0; i < jsonArray.length(); i++) { 
           JSONObject student = jsonArray.getJSONObject(i); 
           v_date=student.getString("v_date"); 
           v_no=student.getString("v_no"); 
           qr_code=student.getString("Qr_code"); 
           name=student.getString("name"); 
           phaths[i]=student.getString("path"); 

          } 

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


        } 
       }, new Response.ErrorListener() { 
        @Override 
        public void onErrorResponse(VolleyError error) { 
         System.out.println("MainActivity 2" + error.toString()); 
        } 
       }) { 
        @Override 
        protected Map<String, String> getParams() throws AuthFailureError { 
         Map<String, String> params = new HashMap<String, String>(); 

         params.put("id", "3"); 
         return params; 
        } 
       }; 
       NotificationData.getmInstance(Loading_Car_info.this).addrequestqueue(stringRequest); 

      return null; 
     } 

     @Override 
     protected void onPostExecute(Void aVoid) { 

      transfer(); 
     } 
    } 
} 

答えて

0

あなたはonResponse()内のすべてのデータを取得した後、転送を呼び出す必要があります:ここで はコードです

try {  
     JSONObject jsnobject = new JSONObject(response); 
     JSONArray jsonArray = jsnobject.getJSONArray("ads"); 
     for (int i = 0; i < jsonArray.length(); i++) { 
      JSONObject student = jsonArray.getJSONObject(i); 
      v_date=student.getString("v_date"); 
      v_no=student.getString("v_no"); 
      qr_code=student.getString("Qr_code"); 
      name=student.getString("name"); 
      phaths[i]=student.getString("path"); 

     } 

     transfer(); 

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

私は、画面のフリーズとlogcatは、活動休止を示し、それを行う場合には –

関連する問題