get请求异步
第一步获取Request对象;第二步获取将reques请求对象加入请求队列:call对象enqueue提供了异步访问方法,而execute则是同步方法;第三步实现回调。
具体代码如下
package com.example.administrator.testokhttp; import android.util.Log; import java.io.IOException; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; /** * Created by Zhaoqingzhi on 2017/2/16. */ public class OkhttpUtils { private static final OkHttpClient okhttpclient=new OkHttpClient(); /** * 获取请求对象request * @param url * @return */ private static Request getRequestFromUrl(String url){ Request request=new Request.Builder().url(url).build(); return request; } /** * 开启异步线程,通过回调方法获取数据 * @param url * @param callback */ public static void loadData(String url, Callback callback){ Request request=getRequestFromUrl(url); okhttpclient.newCall(request).enqueue(callback); } }
在activity中调用:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); OkhttpUtils.loadData("url", new Callback() { @Override public void onFailure(Call call, IOException e) {Message msg=new Message(); msg.what=0; handler.sendMessage(msg);} @Override public void onResponse(Call call, Response response) throws IOException { if(response.isSuccessful()){ str= response.body().string(); //注意这里不是主线程 Log.e("tag==:",str+""); Message msg=new Message(); msg.what=1; handler.sendMessage(msg); } } } ); }