在使用Okhttp时要很多代码觉得麻烦,就写一个封装类,这样以后也好使用
Okhttp
1.按照正常步骤使用Okhttp的话(以Post请求为例)
//创建okhttp端口
OkHttpClient okHttpClient = new OkHttpClient();
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
//传参
JSONObject Json = new JSONObject();
/*
当然也可以这样传参
JSONObject jsonObject = new JSONObject();
jsonObject.put("xx",x);
jsonObject.put("xx","xx");
String json = jsonObject.toString();
*/
String json = "这里传入json串";
//请求服务器的地址
String url = "写自己的请求地址";
//Post请求
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = okHttpClient.newCall(request);
//CallBack是请求回调
call.enqueue(new Callback() {
@Override
//请求失败执行的方法
public void onFailure(Call call, IOException e) {
//可以打印错误信息
}
@Override
//请求成功执行的方法
public void onResponse(Call call, Response response) throws IOException {
runOnUiThread(new Runnable() {
@Override
public void run() {
//可以处理UI(推荐使用Handler,简单现实倒是无所谓了)
}
});
}
});
是不是很麻烦,如果每次要用代码太多,所以就写一个封装类方便自己使用
2.Okhttp的封装
public class Okhttp {
private static Okhttp netokhttp;
public final OkHttpClient client;
private Okhttp(){
client = initOkHttpClient();
}
/*
* 1、创建OkHttpClient对象并初始化的封装。
在整个项目中我们只需要一个OkHttpClient对象,
* 不同的网络请求只需要创建不同的Requset对象和Call对象。
* */
private OkHttpClient initOkHttpClient(){
//初始化的时候可以自定义一些参数
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.readTimeout(2000, TimeUnit.MILLISECONDS)//设置读取超时为2秒
.connectTimeout(3000, TimeUnit.MILLISECONDS)//设置链接超时为3秒
.build();
return okHttpClient;
}
/*当第一次使用Okhttp类时,
Okhttp的对象被创建,并且始终只有一个实例,
okHttpClient作为Okhttp对象的成员变量,
也只有一个实例*/
public static Okhttp postNetokhttp(){
if(netokhttp == null){
netokhttp = new Okhttp();
}
return netokhttp;
}
/*2.发送网络请求的封装
每次执行网络访问的方法一样
传入的参数不一样
可以修改自己想传入的参数类型
*/
//使用方法
//Okhttp.postNetokhttp().callNet(url, json, new Callback(){....});就可以发起网络请求了
public void callNet(String url,String json,Callback callback){
MediaType JSON = MediaType.parse("application/json; charset=utf-8");
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Call call = postNetokhttp().initOkHttpClient().newCall(request);
call.enqueue(callback);
}
}
这是使用封装后的样子
private void initPost(){
String url ="使用自己的连接";
String json = "json串";
Okhttp.postNetokhttp().callNet(url, json, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//可以返回异常信息
}
@Override
//成功时候调用
public void onResponse(Call call, Response response) throws IOException {
//可以做UI以及Gson解析
}
});
}
瞬间就舒服了很多,不用那么长的代码了
Gson
1.使用Gson首先就要写一个实体类
实体类里面对应自己需要来写然后实现
有参无参构造方法
get和set方法
toString方法
就好了
2.Gson的使用
结合上文Okhttp的封装使用
private void initPost(){
String url ="写自己的连接地址";
String json = "json串";
Okhttp.postNetokhttp().callNet(url, json, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String res = response.body().string();
//实例化Gson
Gson gson = new Gson();
//MyGson就是我自己创建的实体类
final MyGson myGson = gson.fromJson(res, MyGson.class);
//这里就获取到我想解析的内容了
Log.e("测试", String.valueOf(myGson.getStatus()));
}
});
}
这就完成了简单使用Okhttp和Gson
谢谢看到这里,Android萌新,有问题望大佬指出。