0
我打電話的方法,從谷歌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
回調來構建位置列表並解析它。
當我調用這個函數時,它返回一個空對象,並在nearByPlacesArray
爲空時移動到下一行創建列表。
我想以某種方式停止處理,直到調用success
方法,因此返回的nearByPlacesArray
不爲空。
我該怎麼做?
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.S.我已經在不在主UI線程上的不同async
線程上執行所有這些操作,因此暫停流程不會是我想的問題。
您可以將結果添加到BlockingQueue並讓線程獲取()一個元素。 –