我不太熟悉OkHttp库,对于如何使用它来处理异步请求,我也有一些疑问。
对于Android编程,我使用的是http的android库,对于一些请求我使用的是asyncTask。
但是,由于我想尝试使用OkHttp库,我在正确使用它的方式上遇到了一些“问题”。
示例:
假设您希望使用OkHttp实现异步请求。我看到OkHttp有自己的异步api ( https://github.com/square/okhttp/blob/master/samples/guide/src/main/java/okhttp3/recipes/AsynchronousGet.java )。
但后来我看到了这个帖子(Square`s OkHttp. Download progress),在这篇文章中,这个家伙使用了“旧”asyncTask,但使用了OkHttp请求(我还在其他论坛上发现,人们正在使用AsyncTask和OkHttp)。
这有点混乱,因为它可以简单地用这段代码来制作,这段代码也可以用于发布:
OkHttpClient client = new OkHttpClient();
// GET request
Request request = new Request.Builder()
.url("http://google.com")
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
Log.e(LOG_TAG, e.toString());
}
@Override
public void onResponse(Response response) throws IOException {
Log.w(LOG_TAG, response.body().string());
Log.i(LOG_TAG, response.toString());
}
});问题:
发布于 2016-03-05 18:30:57
我尝试了这两种方法,它们都在满足我的需要。这取决于你的情况和你真正需要什么。异步任务版本更好,看起来更容易,但是另一个版本(如果您也是通过改造完成的话)提供了一些更多的功能。
例如,在asyncTask中,取消网络呼叫是不可能的,经过改造(我指的是改造,因为我尝试了这个解决方案)可以很容易地完成。
这里有一些很好的链接,可以让您更好地了解改造的工作原理:
https://futurestud.io/blog/retrofit-2-upgrade-guide-from-1-9
http://instructure.github.io/blog/2013/12/09/volley-vs-retrofit/
另外,AsyncTask实际上是同步调用(这也取决于AsyncTask版本)。因此,对于异步调用,您需要使用其他方法。
https://stackoverflow.com/questions/35538124
复制相似问题