Java 等待线程,直到收到回调成功
我正在调用一个从GoogleAPI检索位置列表的方法Java 等待线程,直到收到回调成功,java,android,multithreading,callback,Java,Android,Multithreading,Callback,我正在调用一个从GoogleAPI检索位置列表的方法 nearByPlacesArray = gmObj.getNearbyPlaces(nameValuePairs); if (nearByPlacesArray != null) { for (int i = 0; i < nearByPlacesArray.length; i++) { nearbyPlaces.add(new mNearbyPlace(Integer.p
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])));
}
}
另外,我已经在一个不同的异步线程(而不是主UI线程)上执行了所有这些操作,因此我想停止流不会是一个问题。我认为,您在nearByPlacesArray上得到了一些响应。这就是为什么它会进入if块,所以当您从服务器收到错误消息/响应时就会发生这种情况。因为它将错误响应视为一个非空的东西,尽管它确实有错误的信息
要处理这个问题,您需要在回调接口中实现一些验证功能。这将解决问题。您可以将结果添加到BlockingQueue,并让线程获取元素。
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;
}