je dois être en mesure de MANAGER certaines demandes avec OKHTTP, en utilisant le Google Places AutoComplete
pour recevoir quelques prédictions en tapant l'adresse. Le Problème est Chaque fois que j'insère un CHAR il fera une nouvelle demande mais en même temps j'ai besoin d'annuler le précédent! Ex: New York City = 13 demandes en même temps! Donc j'utilise une seule instance de Call
en essayant d'annuler tout ce qui a été demandé mais sans succès. C'est ce que j'ai fait!Comment annuler la demande à l'aide OKHTTP
Address.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
if(Address.getText().toString().length() > 3){
_Address = Address.getText().toString();
if(call != null){
call.cancel();
}
Request request = new Request.Builder()
.url(getPlaceAutoCompleteUrl(_Address))
.addHeader("content-type", "application/json")
.addHeader("User-Agent", "Mozilla/5.0 (Linux; U; Android 4.0.3; en-us; google_sdk Build/MR1) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30")
.build();
call = client.newCall(request);
call.enqueue(new Callback() {
public void onResponse(Call call, final Response response) throws IOException {
final String result = response.body().string();
runOnUiThread(new Runnable() {
@Override
public void run() {
Log.d("Response",result);
PlacePredictions place = null;
try {
place = LoganSquare.parse(result,PlacePredictions.class);
} catch (IOException e) {
e.printStackTrace();
}
if(autoCompleteAdapter == null){
autoCompleteAdapter = new AutoCompleteAdapter(CustomPlaces.this);
recyclerView.setAdapter(autoCompleteAdapter);
autoCompleteAdapter.Add(place.getPlaces());
}else {
autoCompleteAdapter.Clear();
autoCompleteAdapter.Add(place.getPlaces());
autoCompleteAdapter.notifyDataSetChanged();
}
}
});
}
public void onFailure(Call call, IOException e) {
//fail();
}
});
}else {
if(autoCompleteAdapter != null){
autoCompleteAdapter.Clear();
}
}
}
Je vérifie si l'objet call
est nul et annuler la demande, mais garde encore à venir!
Pourquoi créez-vous une requête pour chaque lettre tapée par l'utilisateur? Ajouter un délai d'attente (1 seconde par exemple) et envoyer une requête uniquement si l'utilisateur n'a rien tapé pendant 1 seconde. Je peux fournir un exemple de code. – babay
Ce serait génial si vous fournissez, merci! –