2016-11-24 5 views
0

以下のコードでは、JsonArrayRequestブロックの後に配列listが空になります。 私はこの行にブレークポイントを設定します: "int size = arrayList.size();" "while"ループが終了するまで、すべてのことはOKです。その後、allayListは空です。アンドロイド・ボレーJsonArrayRequest戻り値なし

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, json_url,(String) null, 
      new Response.Listener<JSONArray>() { 
       @Override 
       public void onResponse(JSONArray response) { 
        int count=0; 
        int responseLength = response.length(); 
        responseLength--; 
        while (count<responseLength) 
        { 
         try { 
          JSONObject jsonObject = response.getJSONObject(count); 
          Contact contact = new Contact(jsonObject.getString("title"), 
            jsonObject.getString("email"), 
            jsonObject.getString("description"), 
            jsonObject.getString("date"), 
            jsonObject.getBoolean("status")); 

          arrayList.add(contact); 
          int size = arrayList.size(); 
          count++; 

         } catch (JSONException e) { 

          e.printStackTrace(); 
         } 
        } 
        int size = arrayList.size(); 
       } 
      }, 
      new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(context,"Error....",Toast.LENGTH_SHORT).show(); 
        error.printStackTrace(); 

       } 
      } 
    ); 
    int size = arrayList.size(); 
    VolleySingleton.getmInstance(context).addToRequestQueue(jsonArrayRequest); 
    return arrayList; 

答えて

0

私は私がコールバックインタフェースを使用したものを表示します:

のonCreate()メソッドで:

recyclerView = (RecyclerView) findViewById(R.id.recyclerview); 
    recyclerView.setHasFixedSize(true); 
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
    recyclerView.setLayoutManager(linearLayoutManager); 
    BackgroundTask backgroundTask = new BackgroundTask(this); 
    backgroundTask.getContacts(new BackgroundTask.arrayListCallBack() { 
     @Override 
     public void onSuccess(ArrayList<Contact> contacts) { 
      RecyclerView.Adapter adapter = new RecyclerAdapter(MainActivity.this, contacts); 
      recyclerView.setAdapter(adapter); 
     } 

     @Override 
     public void onFail(String error) { 
      Toast.makeText(MainActivity.this, error, Toast.LENGTH_LONG).show(); 
     } 
    }); 

とBackgroundTaskのクラスで:

JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, server_url, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      int count = 0; 
      while (count < response.length()) { 
       try { 
        JSONObject jsonObject = response.getJSONObject(count); 
        Contact contact = new Contact(jsonObject.getString("name"), jsonObject.getString("section")); 
        contacts.add(contact); 
        Log.d("process request", "....."+jsonObject.getString("name")); 
        count++; 
       } catch (JSONException e) { 
        e.printStackTrace(); 
        Toast.makeText(context, e.getMessage()+"\nError in Response", Toast.LENGTH_LONG).show(); 
       } 
       callBack.onSuccess(contacts); 
      } 
     } 
    }, new Response.ErrorListener() { 
     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 
      Toast.makeText(context, error.getMessage()+"\nError in Connection", Toast.LENGTH_LONG).show(); 
      callBack.onFail("There's error ..."); 
     } 

    }); 

    MySingleton.getInstance(context).addToRequestQueue(jsonArrayRequest); 
} 

public interface arrayListCallBack { 
    void onSuccess(ArrayList<Contact> contacts); 
    void onFail(String error); 
} 
関連する問題