Search in sources :

Example 6 with LzyResponse

use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.

the class JsonConvert 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 {
    // 重要的事情说三遍,不同的业务,这里的代码逻辑都不一样,如果你不修改,那么基本不可用
    // 重要的事情说三遍,不同的业务,这里的代码逻辑都不一样,如果你不修改,那么基本不可用
    // 重要的事情说三遍,不同的业务,这里的代码逻辑都不一样,如果你不修改,那么基本不可用
    //以下代码是通过泛型解析实际参数,泛型必须传
    //这里为了方便理解,假如请求的代码按照上述注释文档中的请求来写,那么下面分别得到是
    //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("基类错误无法解析!");
    }
}
Also used : ParameterizedType(java.lang.reflect.ParameterizedType) ParameterizedType(java.lang.reflect.ParameterizedType) Type(java.lang.reflect.Type) LzyResponse(com.lzy.demo.model.LzyResponse) SimpleResponse(com.lzy.demo.model.SimpleResponse) JsonReader(com.google.gson.stream.JsonReader)

Example 7 with LzyResponse

use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.

the class PostTextActivity method postJson.

@OnClick(R.id.postJson)
public void postJson(View view) {
    HashMap<String, String> params = new HashMap<>();
    params.put("key1", "value1");
    params.put("key2", "这里是需要提交的json格式数据");
    params.put("key3", "也可以使用三方工具将对象转成json字符串");
    params.put("key4", "其实你怎么高兴怎么写都行");
    JSONObject jsonObject = new JSONObject(params);
    //
    OkGo.post(Urls.URL_TEXT_UPLOAD).tag(//
    this).headers("header1", //
    "headerValue1").upJson(//
    jsonObject).execute(new DialogCallback<LzyResponse<ServerModel>>(this) {

        @Override
        public void onSuccess(LzyResponse<ServerModel> responseData, Call call, Response response) {
            handleResponse(responseData.data, call, response);
        }

        @Override
        public void onError(Call call, Response response, Exception e) {
            super.onError(call, response, e);
            handleError(call, response);
        }
    });
}
Also used : LzyResponse(com.lzy.demo.model.LzyResponse) Response(okhttp3.Response) Call(okhttp3.Call) LzyResponse(com.lzy.demo.model.LzyResponse) JSONObject(org.json.JSONObject) ServerModel(com.lzy.demo.model.ServerModel) HashMap(java.util.HashMap) OnClick(butterknife.OnClick)

Example 8 with LzyResponse

use of com.lzy.demo.model.LzyResponse in project okhttp-OkGo by jeasonlzy.

the class RxCommonActivity method jsonRequest.

@OnClick(R.id.jsonRequest)
public void jsonRequest(View view) {
    Subscription subscription = //
    OkGo.post(Urls.URL_JSONOBJECT).headers("aaa", //
    "111").params("bbb", //一定要注意这里的写法,JsonConvert最后的大括号千万不能忘记
    "222").getCall(new JsonConvert<LzyResponse<ServerModel>>() {
    }, //
    RxAdapter.<LzyResponse<ServerModel>>create()).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);
}
Also used : LzyResponse(com.lzy.demo.model.LzyResponse) Action0(rx.functions.Action0) ServerModel(com.lzy.demo.model.ServerModel) Subscription(rx.Subscription) OnClick(butterknife.OnClick)

Aggregations

LzyResponse (com.lzy.demo.model.LzyResponse)8 OnClick (butterknife.OnClick)6 ServerModel (com.lzy.demo.model.ServerModel)6 Subscription (rx.Subscription)3 Action0 (rx.functions.Action0)3 JsonReader (com.google.gson.stream.JsonReader)2 SimpleResponse (com.lzy.demo.model.SimpleResponse)2 File (java.io.File)2 ParameterizedType (java.lang.reflect.ParameterizedType)2 Type (java.lang.reflect.Type)2 Call (okhttp3.Call)2 Response (okhttp3.Response)2 Bitmap (android.graphics.Bitmap)1 FileConvert (com.lzy.okgo.convert.FileConvert)1 BaseRequest (com.lzy.okgo.request.BaseRequest)1 ArrayList (java.util.ArrayList)1 HashMap (java.util.HashMap)1 List (java.util.List)1 JSONObject (org.json.JSONObject)1