Retrofit2を使用して、マップ上で選択された特定の場所の情報を取得し、アプリケーションのUIに表示する方法はgetLabelFromServer
です。最後のAPI呼び出しに基づいてUIを更新し、以前の呼び出しをキャンセルするように複数のRetrofit呼び出しを管理する
サーバーから情報を受信するのを待っている間にユーザーが選択した場所を変更する可能性があるため、受信した情報の前回の呼び出しをキャンセルし、新しい場所の情報を受け取り、新しい呼び出しの応答時にUIを更新します。 以前の呼び出しでは、ユーザーが現在選択していない以前の場所の情報が表示されるため、UIを更新しないようにしてください。 これを達成するためにコードを以下に変更するにはどうすればよいですか(地図上で新しい場所を選択するたびにUIスレッドでこのメソッドを呼び出します)。
private void getLabelFromServer(Context ctx, GeoPoint geoPoint) {
MapServiceGenerator serviceGenerator = MapServiceGenerator.getInstance(ctx, null);
Call<JsonObject> call = serviceGenerator.getGeoCodeApi().getAddress(geoPoint.getLatitude() + "," + geoPoint.getLongitude());
call.enqueue(new Callback<JsonObject>() {
@Override
public void onResponse(Call<JsonObject> call, Response<JsonObject> response) {
JsonObject result = response.body();
String positionLabel = MapUtils.generateLabelFromJSON(result);
tvLabel.setText(positionLabel);
}
@Override
public void onFailure(Call<JsonObject> call, Throwable t) {
if (t != null) {
t.printStackTrace();
}
}
}
);
}
check call.isExecuted();メソッドを呼び出してから次の要求を出します。 リクエストが完了した場合はtrueを返します。 –