2016-09-13 4 views
1

Hier ist mein Code, ich mag Liste von db füllen und es dann natürlich, aber ich habe Probleme bekommt, es tut asychronouz und wenn ich versuche Wert aus dieser Liste zu bekommen, Ich steige aus dem gebundenen Ausnahme, wie sollte ich diese Methode neu gestalten oder wie kann ich von Mainactivity anrufen, um dieses Problem zu lösen?Wie bekomme ich, wenn Volley fertig ist?

public class VolleySingleton extends Application { 
public static final String TAG = VolleySingleton.class.getSimpleName(); 
private RequestQueue requestQueue; 
private static VolleySingleton instance; 
public static int count=0; 

@Override 
public void onCreate() { 
    super.onCreate(); 
    instance = this; 
} 

public static synchronized VolleySingleton getInstance() { 
    return instance; 
} 

public RequestQueue getRequestQueue() { 
    if (requestQueue == null) { 
     requestQueue = Volley.newRequestQueue(getApplicationContext()); 
    } 
    return requestQueue; 
} 

public <T> void addToRequestQueue(Request<T> req, String tag) { 
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag); 
    getRequestQueue().add(req); 
    count++; 
} 

public <T> void addToRequestQueue(Request<T> request) { 
    getRequestQueue().add(request); 
} 

public void cancelPendingRequests(Object tag) { 
    if (requestQueue != null) { 
     requestQueue.cancelAll(tag); 
    } 
} 

}

private static String TAG = JSonParse.class.getSimpleName(); 

public static List<Room> getRoomArray(String url, Context context) throws InterruptedException { 
    final List<Room> roomList = new ArrayList<>(); 
    final CountDownLatch countDownLatch = new CountDownLatch(1); 
    JsonArrayRequest arrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { 
     @Override 
     public void onResponse(JSONArray response) { 
      Log.d(TAG, response.toString()); 
      try { 
       Room room = null; 
       for (int i = 0; i < response.length(); i++) { 
        room = new Room(); 
        JSONObject newRoom = (JSONObject) response.get(i); 
        room.setId(newRoom.getLong("id")); 
        room.setName(newRoom.getString("name")); 
        room.setActive(newRoom.getBoolean("active")); 
        roomList.add(room); 
       } 
       Helper.initList(roomList); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

     } 
    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError volleyError) { 
      volleyError.printStackTrace(); 
     } 
    }); 

    VolleySingleton.getInstance().addToRequestQueue(arrayRequest); 
    return roomList; 
} 

Antwort

-1

können Sie Daten verarbeiten in

public void onResponse(JSONArray response) { //process response }

In onResponse Volley beendet seine Arbeit. Sie können Rückrufe hier eingestellte Reaktion in Ihrer Klasse zu senden.

+0

wie kann ich das tun? 3.While Aufruf Volley-Methode "getRoomArray()" übergeben Instanz 2.Umsetzung diese Schnittstelle in Ihrer Tätigkeit; –

+0

1. eine Schnittstelle "public interface OnResponseReceived { public void responseReceived (JSONArray Antwort)}" erstellen Ihre Tätigkeit 4.Now können Sie die Methode „responseReceived (jsonArray)“ in Volley Antwort und übergeben Array, dass rufen methos.So Sie das Array in Ihrer Aktivität erhalten – rushi

+0

Was ist der Grund für den downvote oben Antwort ist? – rushi

Verwandte Themen