移动应用开发实践-Task2-简单封装OkHttp
目标:
在Task1的基础上,封装OkHttp的功能性代码做工具类。
Task1链接:https://blog.csdn.net/Biu_Destiny/article/details/114659231
1.创建Utility目录,新建工具类HttpUtil
2.配置HttpUtil
主要是创建新的接口,用于使用者自定义回调,这里传参了activity,是因为需要在activity外部方法创建线程,不然到时候直接在MainActivity中调用会出错。
package com.example.fyn_weather_task2_0.utility;
import android.app.Activity;
import java.io.IOException;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class HttpUtil {
// 自定义接口,两个方法对应Callback两个不同的应对
public interface SimpleAsyncCall {
public void onFailure(String e);
public void onResponse(String s);
}
//创建方法,传参activity(用于确定线程所在活动),url,接口(便于使用者自定义)
public static void getOkHttpAsync(final Activity activity, String url, final SimpleAsyncCall l) {
//同样的OkHttp的简单应用代码
OkHttpClient client = new OkHttpClient();
Request build = new Request.Builder().url(url).get().build();
Call call = client.newCall(build);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, final IOException e) {
//创建线程
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
//回调接口方法
l.onFailure(e.toString());
}
});
}
@Override
public void onResponse(Call call, Response response) throws IOException {
final String s;
//为了防止出错套用try-catch,异常处理方式和onFailure一样
try {
//获得body中的数据
s = response.body().string();
//创建线程
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
//回调接口方法
l.onResponse(s);
}
});
} catch (final IOException e) {
e.printStackTrace();
//创建线程
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
//回调接口方法
l.onFailure(e.toString());
}
});
}
}
});
}
}