我正在调用一种从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
回调来构建一个位置列表并对其进行解析。
当我调用此函数时,它会返回一个空对象,并在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
线程上做了所有这些,所以我想这个停止流程不会是一个问题。
答案 0 :(得分:0)
我想,你得到了一些响应nearByPlacesArray的东西。这就是为什么它进入内部if块,所以当你从服务器获得错误消息/响应时会发生这种情况。因为它将错误响应视为非空的,尽管它确实有错误的信息。
要处理此问题,您需要在&#34; Callback&#34;中实现一些验证功能。接口。这将解决问题。