gpt4 book ai didi

java - 如何在 android-query 中中止 ajax 查询?

转载 作者:行者123 更新时间:2023-12-01 04:29:23 24 4
gpt4 key购买 nike

我正在尝试使用 android-query 库实现搜索自动完成

我的 Activity 中有回调实例:

回调:

class SearchCompleteCallback extends AjaxCallback<ItemSearchResult> {
public void callback(String url, ItemSearchResult searchResult, AjaxStatus status) {
Log.d("SCB", String.format("Url:%s\n Msg: %s\n Code: %s\n Error: %s",
url,
status.getMessage(),
status.getCode(),
status.getError()));
if (searchResult != null) {
Log.d("SCB", String.format("Status: %s\n Val: %s",
searchResult.getStatus(),
searchResult.getInnGroup().getItems()));

updateSearchResult(searchResult);
}
else {
Log.w("SCB", "Ajax failed");

}
}
}

搜索例程,调用文本更改:

private void doSearch(String query) {
ppApi.getSearchResult(query, searchCompleteListener);
}

API类

public class PPServerApi {
private AQuery aq;
private GsonTransformer transformer;

private static class GsonTransformer implements Transformer{
public <T> T transform(String url, Class<T> type, String encoding, byte[] data, AjaxStatus status) {
Gson g = new Gson();
return g.fromJson(new String(data), type);
}
}

public PPServerApi(AQuery newAq){
aq = newAq;
transformer = new GsonTransformer();
AQUtility.setDebug(true);
AjaxCallback.setTransformer(transformer);
}

public void getSearchResult(String itemName, AjaxCallback<ItemSearchResult> cb){
String url = "http://my.api.server/search?q=" + itemName;
aq.ajax(url, ItemSearchResult.class, cb.header("content-type", "application/json"));
}
}

那么,问题是如何在发送新查询之前中止旧查询?
(如果搜索字段中的文本发生更改,我不需要旧查询的结果)

我尝试在 doSearch() 中调用 searchCompleteListener.abort(),但它会导致下一个查询出现异常:

08-09 20:59:10.551: W/AQuery(6854): get:http://my.api.server/search?q=abc
08-09 20:59:10.551: W/AQuery(6854): creating http client
08-09 20:59:10.561: W/AQuery(6854): java.io.IOException: Aborted
08-09 20:59:10.561: W/AQuery(6854): at com.androidquery.callback.AbstractAjaxCallback.httpDo(AbstractAjaxCallback.java:1569)
...

所以,在这种情况下我什至无法执行单个查询。

最佳答案

一旦启动,android-query 就无法取消 AJAX 请求。抱歉,您必须使用另一个库。

可以做的是检查请求完成后是否已过时。

您可以通过检查该 URL 是否与您请求的最新 URL 匹配来做到这一点

if (searchResult != null && url.equals(latestRequestUrl)) {

(注意,您必须让 getSearchResult 返回 URL)

关于java - 如何在 android-query 中中止 ajax 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18152055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com