DataCall
public interface DataCall<T> {
void success(T data);
void fail(Result result);
}
CartModel
public class CartModel {
public static Result goodsList() {
String resultString = HttpUtils.get(\"http://www.zhaoapi.cn/product/getCarts?uid=71\");
try {
Gson gson = new Gson();
Type type = new TypeToken<Result<List<Shop>>>() {
}.getType();
Result result = gson.fromJson(resultString, type);
// Result<List<Goods>> result = new Result<>();
// result.setCode(0);
// List<Goods> list = new ArrayList<>();
// for (int i = 0; i < 30; i++) {
// Goods goods = new Goods();
// goods.setImages(\"\");
// goods.set (\"手机\"+i);
// list.add(goods);
// }
// result.setData(list);
return result;
} catch (Exception e) {
}
Result result = new Result();
result.setCode(-1);
result.setMsg(\"数据解析异常\");
return result;
}
}
HttpUtils
public class HttpUtils {
public static String get(String urlString){
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())//日志拦截器
.connectTimeout(10, TimeUnit.SECONDS)//连接超时
.readTimeout(10,TimeUnit.SECONDS)//读取超时
.writeTimeout(10,TimeUnit.SECONDS)//写入超时
.build();
Request request = new Request.Builder().url(urlString).get().build();
try {
Response response = okHttpClient.newCall(request).execute();
String result = response.body().string();
Log.i(\"dt\",\"请求结果:\"+result);
return result;
} catch (IOException e) {
e.printStackTrace();
}
return \"\";
}
public static String postForm(String url,String[] name,String[] value){
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())//日志拦截器
.connectTimeout(10, TimeUnit.SECONDS)//连接超时
.readTimeout(10,TimeUnit.SECONDS)//读取超时
.writeTimeout(10,TimeUnit.SECONDS)//写入超时
.build();
FormBody.Builder formBuild = new FormBody.Builder();
for (int i = 0; i < name.length; i++) {
formBuild.add(name[i],value[i]);
}
Request request = new Request.Builder().url(url).post(formBuild.build()).build();
try {
Response response = okHttpClient.newCall(request).execute();
String result = response.body().string();
Log.i(\"dt\",result);
return result;
} catch (IOException e) {
e.printStackTrace();
}
return \"\";
}
public static String postFile(String url,String[] name,String[] value,String fileParamName,File file){
OkHttpClient okHttpClient = new OkHttpClient.Builder()
.addInterceptor(new LoggingInterceptor())//日志拦截器
.connectTimeout(10, TimeUnit.SECONDS)//连接超时
.readTimeout(10,TimeUnit.SECONDS)//读取超时
.writeTimeout(10,TimeUnit.SECONDS)//写入超时
.build();
MultipartBody.Builder requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM);
if(file != null){
// MediaType.parse() 里面是上传的文件类型。
RequestBody body = RequestBody.create(MediaType.parse(\"image/*\"), file);
String filename = file.getName();
// 参数分别为: 文件参数名 ,文件名称 , RequestBody
requestBody.addFormDataPart(fileParamName, \"jpg\", body);
}
if (name!=null) {
for (int i = 0; i < name.length; i++) {
requestBody.addFormDataPart(name[i], value[i]);
}
}
Request request = new Request.Builder().url(url).post(requestBody.build()).build();
try {
Response response = okHttpClient.newCall(request).execute();
if (response.code()==200) {
return response.body().string();
}
} catch (IOException e) {
e.printStackTrace();
}
return \"\";
}
public static String postJson(String url,String jsonString){
OkHttpClient okHttpClient = new OkHttpClient();
RequestBody requestBody = RequestBody.create(MediaType.parse(\"application/json\"),jsonString);
Request request = new Request.Builder().url(url).post(requestBody).build();
try {
Response response = okHttpClient.newCall(request).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
}
return \"\";
}
}
Presenter
public abstract class presenter {
DataCall dataCall;
public presenter(DataCall dataCall) {
this.dataCall = dataCall;
}
Handler mHandler = new Handler(Looper.getMainLooper()) {
@Override
public void handleMessage(Message msg) {
Result result = (Result) msg.obj;
if (result.getCode() == 0) {
dataCall.success(result.getData());
} else {
dataCall.fail(result);
}
}
};
public void requestData(final ... args) {
new Thread(new Runnable() {
@Override
public void run() {
Message message = mHandler.obtainMessage();
message.obj = getData(args);
mHandler.sendMessage(message);
}
}).start();
}
protected abstract Result getData( ... args);
public void unBindCall() {
this.dataCall = null;
}
}
CartPresenter
public class CartPresenter extends presenter {
public CartPresenter(DataCall dataCall) {
super(dataCall);
}
@Override
protected Result getData( ... args) {
Result result = CartModel.goodsList();//调用网络请求获取数据
return result;
}
}
CarApp
public class CarApp extends Application {
private static CarApp instance;
private SharedPreferences mSharedPreferences;
@Override
public void onCreate() {
super.onCreate();
instance = this;
mSharedPreferences = getSharedPreferences(\"application\",
Context.MODE_PRIVATE);
/* JPushInterface.setDebugMode(true);
JPushInterface.init(this); */ // 初始化 JPush
}
public static CarApp getInstance() {
return instance;
}
public SharedPreferences getShare() {
return mSharedPreferences;
}
}
LoggingInterceptor
public class LoggingInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
//这个chain里面包含了request和response,所以你要什么都可以从这里拿
Request request = chain.request();
long t1 = System.nanoTime();//请求发起的时间
Log.i(\"dt\",String.format(\"发送请求 %s on %s%n%s\",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long t2 = System.nanoTime();//收到响应的时间
//这里不能直接使用response.body().string()的方式输出日志
//因为response.body().string()之后,response中的流会被关闭,程序会报错,我们需要创建出一
//个新的response给应用层处理
ResponseBody responseBody = response.peekBody(1024 * 1024);
Log.i(\"dt\",String.format(\"接收响应: [%s] %n返回json:【%s】 %.1fms%n%s\",
response.request().url(),
responseBody.string(),
(t2 - t1) / 1e6d,
response.headers()));
return response;
}
}
继续阅读与本文标签相同的文章
上一篇 :
注册电子邮箱,打造个人网络商务形象
-
高危预警| SQL数据库成主要攻击对象,或引发新一轮大规模勒索
2026-05-18栏目: 教程
-
6 个 K8s 日志系统建设中的典型问题,你遇到过几个?
2026-05-18栏目: 教程
-
阿里云容器服务ACK集群上如何使用ack-etcd-backup-operator定期自动对ETCD集群数据做备份
2026-05-18栏目: 教程
-
开发函数计算的正确姿势——借助 Ghostscript 将 PDF 转换成 JPG
2026-05-18栏目: 教程
-
阿里云RDS如何进行账号及数据库管理?
2026-05-18栏目: 教程
