使用Okhttp3如何解决泛型擦除

使用了鸿洋大神封装的Okhttp3,遇到了泛型擦除如何解决?
能够成功的传值到服务器端,服务器端传回来的数据类型是<T>,到了方法parseNetworkResponse()中后泛型擦除,改如何解决

public abstract class OkHttpCallback<T> extends Callback<HttpWrapper<T>> {

    public String TAG="OkHttpCallback";

    @Override
    public HttpWrapper<T> parseNetworkResponse(Response response, int id) throws Exception {

//        Log.e(TAG,response.body().string()+"-------------------------------------------------------------------------------------");

        return new Gson().fromJson(response.body().string(),HttpWrapper.class);
    }

    @Override
    public void onError(Call call, Exception e, int id) {

        /**
         * 异常
         */
//        Toast.makeText(AppCenter.mContext,"网络错误",Toast.LENGTH_LONG).show();

    }

    @Override
    public void onResponse(HttpWrapper<T> response, int id) {

        switch (response.getCode()){
            case 200:
                onSuccess(response,id);
                break;
            case 201:
                /**
                 * 201失败情况下
                 */
//                Toast.makeText(AppCenter.mContext,response.getInfo(),Toast.LENGTH_LONG).show();
                onFaild(response,id);
                break;
            default:
                break;
        }

    }

    protected abstract void onFaild(HttpWrapper<T> response, int id);

    protected abstract void onSuccess(HttpWrapper<T> response, int id) ;

}


public class HttpWrapper<T> implements Serializable {

    /**
     * 响应码  服务器返回200为成功,201为失败
     */
    public int code;


    /**
     * 返回的数据类型 不确定
     */
    public T data;


    /**
     * 对应的响应信息
     */
    public String info;



    public String getInfo() {
        return info;
    }

    public void setInfo(String info) {
        this.info = info;
    }

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }


}


public class Test {

    public String success;

    public Test(){

    }

    public Test(String success){
        this.success=success;
    }

    @Override
    public String toString() {
        return "Test{" +
                "success='" + success + '\'' +
                '}';
    }
}
      

      OkHttpUtils
                        .post()
                        .url(Constants.BASEURL+"textPost")
                        .addParams("username",et_username.getText().toString())
                        .addParams("password",et_password.getText().toString())
                        .build()
                        .execute(new OkHttpCallback<Test>() {
                            @Override
                            protected void onFaild(HttpWrapper<Test> response, int id) {

//                                et_username.setText("onError:"+response.getData());
//                                System.out.println("onError:"+response.getData()+"------------------------------------");
//
//                                Log.e(TAG,"onError:"+response.getData()+"------------------------------------");
                            }

                            @Override
                            protected void onSuccess(HttpWrapper<Test> response, int id) {

                                et_username.setText(new Gson().toJson(response));
                                System.out.println("onSuccess:"+new Gson().toJson(response)+"------------------------------------");

                                Log.e(TAG,"onSuccess:"+new Gson().toJson(response)+"------------------------------------");

                            }

                        });
阅读 2.9k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进