2016-09-13 4 views
1

여기 내 코드가 있는데, 데이터베이스에서 List를 채우고 당연히 사용하고 싶지만, 문제가있다. asychronouz를하고 있는데,이 목록에서 가치를 얻으려고 할 때, 나는 바깥에서 벗어나있다. 예외,이 방법을 어떻게 다시 작성해야합니까? 또는이 문제를 해결하기 위해 Mainactivity에서 어떻게 호출해야합니까? onResponse 발리에서발리 연습이 끝나면 어떻게해야하나요?

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

에서

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; 
} 

답변

-1

당신이 처리 할 수있는 데이터가 작업을 완료했다. 여기에 콜백을 설정하여 클래스에서 응답을 보낼 수 있습니다.

+0

어떻게하면됩니까? 2.Implement 발리 방법 "getRoomArray()"를 호출 활동 3.While에서이 인터페이스 인스턴스를 전달, –

+0

1. 인터페이스 "공용 인터페이스 OnResponseReceived { 이 공공 무효 responseReceived (JSONArray 응답)}"을 만들 귀하의 활동 중 4. 이제 Volley 응답에서 "responseReceived (jsonArray)"메서드를 호출하고 해당 메쏘로 배열을 전달할 수 있습니다. 그러면 해당 배열에 액티비티가 생깁니다. – rushi

+0

답변에 대한 downvote의 이유는 무엇입니까? – rushi