Android 回调函数 解析问题
高洛峰
高洛峰 2017-04-17 17:09:18
[Android讨论组]
    大家先看看我的代码,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();
     
     这时候就无法解析了  大家有没有好的实现思路,请教以下

}


高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
ringa_lee

不建议重复造轮子
用下面这个,类似的库还有好多
http://square.github.io/retrofit/

ringa_lee

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

ringa_lee

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

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

阿神

已测试。 没问题。

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);
}
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号