最近需要大量的解析我就把最近最好的OkHttp还有Gson写到了一起,话不多说直接代码了
public class OkHttpUtils {
//第一个Post请求 异步方法
// 1:首先定义一个接口
public interface GetEntityCallBack{
// 2:定义一个或多个抽象方法
void getEntity(Object obj);
}
// 声明一个全局变量
public static GetEntityCallBack callBack;
//3:再本类中定义一个接口实例(只是定义,而不是创建):目的是接受调用者传过来的接口
public static void setGetEntityCallBack(GetEntityCallBack callBack1){
// GetEntityCallBack变成全局变量
callBack=callBack1;
}
// Type类型封装的 也可以把type改成Class 下面的参数也是class
public static void post(final Context context , Map<String,String > map, String path, final Class cla){
OkHttpClient client = new OkHttpClient();
FormBody.Builder builder = new FormBody.Builder();
//
Set<Map.Entry<String, String>> entries = map.entrySet();
for (Map.Entry<String ,String> e:entries){
//
builder.add(e.getKey(),e.getValue());
}
FormBody body = builder.build();
final Request request = new Request.Builder()
.url(path)
.post(body)
.build();
Call call = client.newCall(request);
// 接口回调 这个属于异步方法
call.enqueue(new Callback() {
// 失败的时候
@Override
public void onFailure(Call call, IOException e) {
// Toast.makeText(context, "下载失败,检查网络", Toast.LENGTH_SHORT).show();
System.out.println("下载失败,检查网络");
}
// 成功的时候
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
// 将响应踢转化成字符串类型
String json = response.body().string();
Gson gson = new Gson();
// 把解析出来的数据 放到接口中
Object o = gson.fromJson(json,cla);
// 接口回调:把这个接口方法放到你想要放到地方
callBack.getEntity(o);
Log.e(TAG, "onResponse: 回调" );
}
}
});
}
// 第二个Post请求 同步方法
private static Object o1;
public static Object postTwo(final String path , Context context , final Class cla ){
new Thread(new Runnable() {
@Override
public void run() {
OkHttpClient client = new OkHttpClient();
FormBody.Builder builder = new FormBody.Builder();
FormBody body = builder.build();
Request request = new Request.Builder()
.url(path)
.post(body)
.build();
Call call = client.newCall(request);
try {
Response response = call.execute();
int code = response.code();
if (code == 200 ){
// 将响应踢转化成字符串类型
String json = response.body().string();
Gson gson = new Gson();
o1 = gson.fromJson(json,cla);
}
} catch (IOException e) {
e.printStackTrace();
}
}
//启动线程
}).start();
return o1;
}
// Get请求 同步方法
public static Object get(String path , Context context){
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(path)
.build();
Call call = client.newCall(request);
try {
Response response = call.execute();
int code = response.code();
if (code == 200){
// 得到响应体
ResponseBody body = response.body();
byte[] bytes = body.bytes();
Bitmap bitmap = BitmapFactory.decodeByteArray(bytes,0,bytes.length);
Handler handler = new Handler();
handler.post(new Runnable() {
@Override
public void run() {
// 控件.setImageBitmap(bitmap);
}
});
}else{
Toast.makeText(context, "请求网络失败,请连接网络", Toast.LENGTH_SHORT).show();
}
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
// Get请求 异步方法
public static void getTwo(final String path, final Context context, final Class cla){
OkHttpClient client = new OkHttpClient();
final Request request = new Request.Builder()
.url(path)
.get()
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Toast.makeText(context , "请求网络失败,请检查网络", Toast.LENGTH_SHORT).show();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (response.isSuccessful()){
String json = response.body().string();
Gson gson = new Gson();
Object o = gson.fromJson(json, cla);
callBack.getEntity(o);
}
}
});
}
}
我相信注释已经很明白了,希望对你有所帮助