Google API에서 작업 공간 목록을 검색하는 메소드를 호출하고 있습니다.콜백 성공이 수신 될 때까지 스레드에서 대기 중
nearByPlacesArray = gmObj.getNearbyPlaces(nameValuePairs);
if (nearByPlacesArray != null) {
for (int i = 0; i < nearByPlacesArray.length; i++) {
nearbyPlaces.add(new mNearbyPlace(Integer.parseInt(nearByPlacesArray[i][0]), nearByPlacesArray[i][1], Double.parseDouble(nearByPlacesArray[i][2]), Double.parseDouble(nearByPlacesArray[i][3])));
}
}
그런 다음 목록 양식을 작성하고 회 전자 어댑터로 전달하십시오.
getNearbyPlaces
함수는 비동기 적으로 실행되고 Retrofit success
콜백을 사용하여 작업 영역 목록을 작성하고 구문 분석합니다.
이 함수를 호출하면 null 객체가 반환되고 nearByPlacesArray
이 null 일 때 목록을 만드는 다음 줄로 이동합니다.
success
메서드가 호출되어 반환 된 nearByPlacesArray
이 null이 아니므로 계속 처리를 중단하고 싶습니다.
어떻게하면됩니까?
public String[][] getNearbyPlaces(List<NameValuePair> nameValuePairs) {
try {
…
RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(finalUri.toString()).build();
IGooglePlacesApi iGPlaceApi = restAdapter.create(IGooglePlacesApi.class);
iGPlaceApi.getStreams(new Callback<mGooglePlacesApiResponse>() {
@Override
public void failure(RetrofitError retrofitError) {
String serverResponse = retrofitError.toString();
}
@Override
public void success(mGooglePlacesApiResponse googlePlacesObj, Response arg1) {
nearbyPlaces = new String[googlePlacesObj.results.size()][4];
for (int i = 0; i < googlePlacesObj.results.size(); i++) {
mGooglePlaces.place place = googlePlacesObj.results.get(i);
nearbyPlaces[i][0] = place.icon;
...
}
}
});
}
…
finally {
Log.d("serverResponse:", serverResponse);
}
return nearbyPlaces;
}
P. 나는 이미 메인 UI 스레드가 아닌 다른 async
스레드에서이 모든 작업을 수행하고 있으므로 흐름을 중단해도 문제가되지 않습니다.
결과를 BlockingQueue에 추가하고 스레드가 요소를 take()하도록 할 수 있습니다. –