今天封装了一下超级简单的OkHttp的异步请求,我也是在学习中,这篇文章算是做个记录,有问题欢迎指出
模拟器能跑 真机报错 应该是UI线程的问题 明天再来弄一下
同步请求的话就比较简单,直接return就可以了,网上例子很多我就不贴代码了,异步耗时操作时,会导致先return再获取,从而不能获取到请求的数据,这里针对这个问题给出一个简单的解决方案。
上代码
新建一个类 类名为MyOkHttp
/** * @Description OkHttp异步get请求 * @Author LauHao * @Time 2018/1/15 9:57 */ public static void getRequestAsyn(String url, final ResultCallback callback) { OkHttpClient client = new OkHttpClient(); MyLog.d(TAG, HttpUrl + url); final Request request = new Request .Builder() .url(HttpUrl + url) .build(); Call call = client.newCall(request); call.enqueue(new Callback() { @Override public void onFailure(Call call, IOException e) { MyLog.d(TAG, "OkHttp Asyn Get Call Failure"); callback.onFailure(String.valueOf(e)); } @Override public void onResponse(Call call, Response response) throws IOException { if (response.isSuccessful()) { MyLog.d(TAG, "Asyn Get Response is Success"); String result = response.body().string(); callback.onResponse(result); } else { MyLog.d(TAG, "Asyn Get Response is Failure"); } } }); }
接口很简单:
public interface ResultCallback { void onFailure(String msg); void onResponse(String result); }
在Activity中的使用:
MyOkHttp.getRequestAsyn(url, new MyOkHttp.ResultCallback() { @Override public void onFailure(String msg) { MyLog.d(TAG,"Failure info: "+msg); } @Override public void onResponse(String result) { jsonParse(result); //在这写要做的事 result即请求返回的数据
MyLog.d(TAG,"result"+result); } });这个排版看起来很奇怪 搞不好 乱了点 凑合看