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并让线程获取()一个元素。 –