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;
}
어떻게하면됩니까? 2.Implement 발리 방법 "getRoomArray()"를 호출 활동 3.While에서이 인터페이스 인스턴스를 전달, –
1. 인터페이스 "공용 인터페이스 OnResponseReceived { 이 공공 무효 responseReceived (JSONArray 응답)}"을 만들 귀하의 활동 중 4. 이제 Volley 응답에서 "responseReceived (jsonArray)"메서드를 호출하고 해당 메쏘로 배열을 전달할 수 있습니다. 그러면 해당 배열에 액티비티가 생깁니다. – rushi
답변에 대한 downvote의 이유는 무엇입니까? – rushi