上一张给大家封装了okHttp,线程和网络请求大家不用管理,直接传入参数就可以了,但是唯一不足的就是返回的数据类型是String,这次为大家对Netloader进行了二次封装
下面是演示的代码
ResultUtils.getInstance().loadOrdinaryResult(url, list,new TypeToken<Result<User>>() {
}.getType() ,new ResultListener<Result<User>>() {
@Override
public void success(Result<User> t) {
if (MsgToast.mToast(LoginActivity.this, t)) {
Toast.makeText(LoginActivity.this, "登录成功", 2000).show();
}
}
@Override
public void fail(String failString, Exception e) {
Toast.makeText(LoginActivity.this, failString, 2000).show();
}
});
是不是很简单那?直接返回的就是你想要的实体类,这样的方法使用要求大家对java泛型有一定的了解才能使用明白
以下贴出二次封装的源码基于上一章讲解的Netloader封装的,如果nicopy源码出现错误,请回顾上一张
package com.wolf.mirror.utils;
import java.lang.reflect.Type;
import java.util.List;
import org.apache.http.message.BasicNameValuePair;
import com.google.gson.Gson;
import com.wolf.mirror.utils.NetLoader.NetResponseListener;
public class ResultUtils {
public static ResultUtils utils;
private Gson gson;
private ResultUtils() {
gson = new Gson();
}
public static ResultUtils getInstance() {
if (utils == null) {
utils = new ResultUtils();
}
return utils;
}
// get请求返回实体类
public <T> void LoadGetResult(String url, final Type type,final ResultListener<T> listener) {
NetLoader.getInstance().loadGetData(url, new NetResponseListener() {
@Override
public void success(String resultString) {
T t = gson.fromJson(resultString, type);
if (t != null) {
listener.success(t);
}
}
@Override
public void fail(String failString, Exception e) {
listener.fail(failString, e);
}
});
}
// 普通post请求返回实体类
public <T> void loadOrdinaryResult(String url,
List<BasicNameValuePair> list,final Type type , final ResultListener<T> listener) {
NetLoader.getInstance().loadOrdinaryPostData(url,
new NetResponseListener() {
@Override
public void success(String resultString) {
T t = gson.fromJson(resultString, type);
if (t != null) {
listener.success(t);
}
}
@Override
public void fail(String failString, Exception e) {
listener.fail(failString, e);
}
}, list);
}
// 上传文件返回实体类
public <T> void loadPostFilesResult(String url, String[] filekeys,
String[] filePaths, final Type type,final ResultListener<T> listener) {
NetLoader.getInstance().loadPostFilesData(url, filekeys, filePaths,
new NetResponseListener() {
@Override
public void success(String resultString) {
T t = gson.fromJson(resultString, type);
if (t != null) {
listener.success(t);
}
}
@Override
public void fail(String failString, Exception e) {
listener.fail(failString, e);
}
});
}
// 上传文件携带参数
public <T> void loadPostParamsWithFilesResult(String url,
String[] filekeys, String[] filePaths,
List<BasicNameValuePair> list, final Type type,final ResultListener<T> listener) {
NetLoader.getInstance().loadPostParamsWithFiles(url, filekeys,
filePaths, new NetResponseListener() {
@Override
public void success(String resultString) {
T t = gson.fromJson(resultString, type);
if (t != null) {
listener.success(t);
}
}
@Override
public void fail(String failString, Exception e) {
listener.fail(failString, e);
}
}, list);
}
public <T> void loadPostDataWithCookie(String url, String json,
String cookiekey, String cookie, final Type type,final ResultListener<T> listener) {
NetLoader.getInstance().loadPostDataWithCokkie(url, json, cookiekey,
cookie, new NetResponseListener() {
@Override
public void success(String resultString) {
T t = gson.fromJson(resultString, type);
if (t != null) {
listener.success(t);
}
}
@Override
public void fail(String failString, Exception e) {
listener.fail(failString, e);
}
});
}
public interface ResultListener<T> {
void success(T t);
void fail(String failString, Exception e);
}
}