如何使用OKHTTP取消请求 [英] How to cancel the request using OKHTTP
问题描述
我需要能够通过 OKHTTP 对 MANAGER 的某些请求,并使用Google Places AutoComplete
通过键入地址来接收一些预测. 问题是每当我插入一个 CHAR 时,它将发出一个新请求,但同时我需要取消上一个请求!例如:纽约市=同时请求13个!因此,我正在使用Call
的单个实例尝试取消已请求但没有成功的任何内容.这就是我所做的!
I need to be able to MANAGER some requests with OKHTTP, using the Google Places AutoComplete
to receive some predictions by typing the Address. The Problem is Each time that I insert a CHAR it will make a new request but at the same time I need to cancel the previous one! Ex : New York City = 13 Requests at the same time! So I'm using a single instance of Call
trying to cancel anything that has been requested but with no success. This is what I did!
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();
}
}
}
我检查call
对象是否为空,并取消请求,但仍会继续发送!
I check if the call
object is null and cancel the request but still keeps coming!
推荐答案
有关以下内容:
//Set tags for your requests when you build them:
Request request = new Request.Builder().
url(url).tag("requestKey").build();
//When you want to cancel:
//A) go through the queued calls and cancel if the tag matches:
for (Call call : mHttpClient.dispatcher().queuedCalls()) {
if (call.request().tag().equals("requestKey"))
call.cancel();
}
//B) go through the running calls and cancel if the tag matches:
for (Call call : mHttpClient.dispatcher().runningCalls()) {
if (call.request().tag().equals("requestKey"))
call.cancel();
}
这篇关于如何使用OKHTTP取消请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!