Android 回调函数 解析问题

冰冰的冻结
  • 519
    大家先看看我的代码,Okhttp访问接口返回json 然后 解析回调的例子
    
     public static void get(String url, final CallBack callback) {
            final Request request = new Request.Builder().url(url).get().build();
            mOkhttpClient().newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    e.printStackTrace();
                    if(callback != null) {
                         callback.onError();
                    }
                }
    
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    if (!response.isSuccessful()) {
                        if(callback != null) {
                            callback.onError();
                        }
                    }
                    final String result = response.body().string();
                    
                    if(callback != null) {
                        callback.onSuccess(String result);
                    }  
        }
        
public interface CallBack {

    void onSuccess(String result);

    void onError();
}

这样写我需要把json 字符串返回回来以后再解析 感觉很麻烦 ,

想实现以下这样的方式:
HttpRequest.get(url, new CallBack<Test>() {
    onSuccess(Test test);
    onError();
}

经过自己思考:修改回调函数:

 public interface CallBack<T> {

    void onSuccess(T result);

    void onError();
}

public static <T> void get(String url, final CallBack<T> callback) {
     Gson gson = new Gson();
     
     这时候就无法解析了  大家有没有好的实现思路,请教以下

}


回复
阅读 2.9k
4 个回答

e...这个问题啊 我没怎么看得懂你的意思,你是想解析json字符串,在哪儿解析不都一样吗?

get方法在加一个T的class参数

get(String url, final CallBack<T> callback,Class<T> cls)

walkoncode
  • 4
新手上路,请多包涵

已测试。 没问题。

public void get(ResultListener<T> listener){        
http.send(HttpMethod.POST, url, params, new    RequestCallBack<String>() {
        @Override
        public void onFailure(HttpException arg0, String arg1) {
            listener.onError(arg1);
        }

        @Override
        public void onSuccess(ResponseInfo<String> responseInfo) {
            T obj = parse(businessClass, responseInfo.result);
            listener.onSuccess(obj);
        }
    });
}

public static <T> T parse(Class<T> businessClass, String json) {
    Gson gson = new Gson();
    T obj = (T) gson.fromJson(json, businessClass);
    return obj;
}

    public interface ResultListener<T> {
    void onSuccess(T t);

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