use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.
the class TestActivity method btn1.
@OnClick(R.id.btn1)
public void btn1(View view) {
Call<String> stringCall = OkGo.get("").getCall(StringConvert.create());
Call<Bitmap> bitmapCall = OkGo.get("").getCall(BitmapConvert.create());
Call<File> fileCall = OkGo.get("").getCall(new FileConvert());
Call<LzyResponse<ServerModel>> call = OkGo.get("").getCall(new JsonConvert<LzyResponse<ServerModel>>() {
});
Call<LzyResponse<ServerModel>> listCall = OkGo.get("").getCall(new JsonConvert<LzyResponse<ServerModel>>() {
});
Observable<String> stringObservable = OkGo.get("").getCall(StringConvert.create(), RxAdapter.<String>create());
Observable<LzyResponse<ServerModel>> observable = OkGo.get("").getCall(new JsonConvert<LzyResponse<ServerModel>>() {
}, RxAdapter.<LzyResponse<ServerModel>>create());
}
use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.
the class RxCommonActivity method jsonArrayRequest.
@OnClick(R.id.jsonArrayRequest)
public void jsonArrayRequest(View view) {
Subscription subscription = //
ServerApi.getServerListModel("aaa", "bbb").doOnSubscribe(new Action0() {
@Override
public void call() {
showLoading();
}
}).map(new Func1<LzyResponse<List<ServerModel>>, List<ServerModel>>() {
@Override
public List<ServerModel> call(LzyResponse<List<ServerModel>> response) {
return response.data;
}
}).observeOn(//
AndroidSchedulers.mainThread()).subscribe(new Action1<List<ServerModel>>() {
@Override
public void call(List<ServerModel> serverModels) {
//请求成功
dismissLoading();
handleResponse(serverModels, null, null);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
//请求失败
throwable.printStackTrace();
showToast("请求失败");
dismissLoading();
handleError(null, null);
}
});
addSubscribe(subscription);
}
use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.
the class RxCommonActivity method retrofitRequest.
@OnClick(R.id.retrofitRequest)
public void retrofitRequest(View view) {
Subscription subscription = //
ServerApi.getServerModel("aaa", "bbb").doOnSubscribe(new Action0() {
@Override
public void call() {
//开始请求前显示对话框
showLoading();
}
}).map(new Func1<LzyResponse<ServerModel>, ServerModel>() {
@Override
public ServerModel call(LzyResponse<ServerModel> response) {
return response.data;
}
}).observeOn(//切换到主线程
AndroidSchedulers.mainThread()).subscribe(new Action1<ServerModel>() {
@Override
public void call(ServerModel serverModel) {
//请求成功
dismissLoading();
handleResponse(serverModel, null, null);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
//请求失败
throwable.printStackTrace();
showToast("请求失败");
dismissLoading();
handleError(null, null);
}
});
addSubscribe(subscription);
}
use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.
the class FormUploadActivity method formUpload.
@OnClick(R.id.formUpload)
public void formUpload(View view) {
ArrayList<File> files = new ArrayList<>();
if (imageItems != null && imageItems.size() > 0) {
for (int i = 0; i < imageItems.size(); i++) {
files.add(new File(imageItems.get(i).path));
}
}
// 拼接参数
//
OkGo.<LzyResponse<ServerModel>>post(Urls.URL_FORM_UPLOAD).tag(//
this).headers("header1", //
"headerValue1").headers("header2", //
"headerValue2").params("param1", //
"paramValue1").params("param2", //
"paramValue2").addFileParams("file", // 这种方式为同一个key,上传多个文件
files).execute(new JsonCallback<LzyResponse<ServerModel>>() {
@Override
public void onStart(Request<LzyResponse<ServerModel>, ? extends Request> request) {
btnFormUpload.setText("正在上传中...");
}
@Override
public void onSuccess(Response<LzyResponse<ServerModel>> response) {
handleResponse(response);
btnFormUpload.setText("上传完成");
}
@Override
public void onError(Response<LzyResponse<ServerModel>> response) {
handleError(response);
btnFormUpload.setText("上传出错");
}
@Override
public void uploadProgress(Progress progress) {
System.out.println("uploadProgress: " + progress);
String downloadLength = Formatter.formatFileSize(getApplicationContext(), progress.currentSize);
String totalLength = Formatter.formatFileSize(getApplicationContext(), progress.totalSize);
tvDownloadSize.setText(downloadLength + "/" + totalLength);
String speed = Formatter.formatFileSize(getApplicationContext(), progress.speed);
tvNetSpeed.setText(String.format("%s/s", speed));
tvProgress.setText(numberFormat.format(progress.fraction));
pbProgress.setMax(10000);
pbProgress.setProgress((int) (progress.fraction * 10000));
}
});
}
use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.
the class JsonCallback method convertSuccess.
/**
* 该方法是子线程处理,不能做ui相关的工作
* 主要作用是解析网络返回的 response 对象,生产onSuccess回调中需要的数据对象
* 这里的解析工作不同的业务逻辑基本都不一样,所以需要自己实现,以下给出的时模板代码,实际使用根据需要修改
* <pre>
* OkGo.get(Urls.URL_METHOD)//
* .tag(this)//
* .execute(new DialogCallback<LzyResponse<ServerModel>>(this) {
* @Override
* public void onSuccess(LzyResponse<ServerModel> responseData, Call call, Response response) {
* handleResponse(responseData.data, call, response);
* }
* });
* </pre>
*/
@Override
public T convertSuccess(Response response) throws Exception {
// 重要的事情说三遍,不同的业务,这里的代码逻辑都不一样,如果你不修改,那么基本不可用
// 重要的事情说三遍,不同的业务,这里的代码逻辑都不一样,如果你不修改,那么基本不可用
// 重要的事情说三遍,不同的业务,这里的代码逻辑都不一样,如果你不修改,那么基本不可用
// 如果你对这里的代码原理不清楚,可以看这里的详细原理说明:https://github.com/jeasonlzy/okhttp-OkGo/blob/master/README_JSONCALLBACK.md
// 如果你对这里的代码原理不清楚,可以看这里的详细原理说明:https://github.com/jeasonlzy/okhttp-OkGo/blob/master/README_JSONCALLBACK.md
// 如果你对这里的代码原理不清楚,可以看这里的详细原理说明:https://github.com/jeasonlzy/okhttp-OkGo/blob/master/README_JSONCALLBACK.md
//以下代码是通过泛型解析实际参数,泛型必须传
//这里为了方便理解,假如请求的代码按照上述注释文档中的请求来写,那么下面分别得到是
//com.lzy.demo.callback.DialogCallback<com.lzy.demo.model.LzyResponse<com.lzy.demo.model.ServerModel>> 得到类的泛型,包括了泛型参数
Type genType = getClass().getGenericSuperclass();
//从上述的类中取出真实的泛型参数,有些类可能有多个泛型,所以是数值
Type[] params = ((ParameterizedType) genType).getActualTypeArguments();
//我们的示例代码中,只有一个泛型,所以取出第一个,得到如下结果
//com.lzy.demo.model.LzyResponse<com.lzy.demo.model.ServerModel>
Type type = params[0];
// https://github.com/jeasonlzy/okhttp-OkGo/blob/master/README_JSONCALLBACK.md 这里的第一种方式定义就可以实现
if (!(type instanceof ParameterizedType))
throw new IllegalStateException("没有填写泛型参数");
//如果确实还有泛型,那么我们需要取出真实的泛型,得到如下结果
//class com.lzy.demo.model.LzyResponse
//此时,rawType的类型实际上是 class,但 Class 实现了 Type 接口,所以我们用 Type 接收没有问题
Type rawType = ((ParameterizedType) type).getRawType();
//这里获取最终内部泛型的类型 com.lzy.demo.model.ServerModel
Type typeArgument = ((ParameterizedType) type).getActualTypeArguments()[0];
//这里我们既然都已经拿到了泛型的真实类型,即对应的 class ,那么当然可以开始解析数据了,我们采用 Gson 解析
//以下代码是根据泛型解析数据,返回对象,返回的对象自动以参数的形式传递到 onSuccess 中,可以直接使用
JsonReader jsonReader = new JsonReader(response.body().charStream());
if (typeArgument == Void.class) {
//无数据类型,表示没有data数据的情况(以 new DialogCallback<LzyResponse<Void>>(this) 以这种形式传递的泛型)
SimpleResponse simpleResponse = Convert.fromJson(jsonReader, SimpleResponse.class);
response.close();
//noinspection unchecked
return (T) simpleResponse.toLzyResponse();
} else if (rawType == LzyResponse.class) {
//有数据类型,表示有data
LzyResponse lzyResponse = Convert.fromJson(jsonReader, type);
response.close();
int code = lzyResponse.code;
//一般来说服务器会和客户端约定一个数表示成功,其余的表示失败,这里根据实际情况修改
if (code == 0) {
//noinspection unchecked
return (T) lzyResponse;
} else if (code == 104) {
//比如:用户授权信息无效,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
throw new IllegalStateException("用户授权信息无效");
} else if (code == 105) {
//比如:用户收取信息已过期,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
throw new IllegalStateException("用户收取信息已过期");
} else if (code == 106) {
//比如:用户账户被禁用,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
throw new IllegalStateException("用户账户被禁用");
} else if (code == 300) {
//比如:其他乱七八糟的等,在此实现相应的逻辑,弹出对话或者跳转到其他页面等,该抛出错误,会在onError中回调。
throw new IllegalStateException("其他乱七八糟的等");
} else {
throw new IllegalStateException("错误代码:" + code + ",错误信息:" + lzyResponse.msg);
}
} else {
response.close();
throw new IllegalStateException("基类错误无法解析!");
}
}
Aggregations