记录一下,自己犯过最愚蠢的错误
在Callback中onResponse(Call call, Response response) ,对返回值 response 进行解时,
把 String responseText=response.body().string();
误写成了body().toString()
这里打印出来的是 okhttp3.internal.http.RealResponseBody@22f08b2
被这个错误折磨了几个小时,好气好气
然后讲一下封装一下okhttp3,GsonFormat插件的使用,还有进行Gson解析,我们解析干货集中营提供的数据,地址:http://gank.io/api/random/data/Android/1
1.首先打开settings–>plugins–>搜索GsonFormat 然后下载(就是Uninstall对应的位置)–>下载完后点ok,这时Android studio会重启
紧接着建一个bean类,在类中空白处右键,选择Generate,出现下图,选择GsonFormat
然后把我们的要解析的json数据复制到下图,点击ok->ok(建议出现的对话框最好截屏,方便后面解析,不截屏也没事,反正用的是gson),这时就会出现神奇的一幕了
ublic class DataBean {
/**
* error : false
* results : [{"_id":"5700808d67765933d9b0aa3a","createdAt":"2016-04-03T10:31:41.176Z","desc":"一个生成Material Design风格icon的工具,比如阴影形状之类的,挺适合个人开发者。","publishedAt":"2016-06-23T11:58:15.971Z","source":"chrome","type":"Android","url":"https://github.com/Maddoc42/Android-Material-Icon-Generator","used":true,"who":"06peng"}]
*/
private boolean error;
private List<ResultsBean> results;
public boolean isError() {
return error;
}
public void setError(boolean error) {
this.error = error;
}
public List<ResultsBean> getResults() {
return results;
}
......
}
没看错,没看错,没看错,bean类自动帮我们写了,第一次见到的时候感觉以前都白混了,哈哈,对于再复杂的json数据都不用怕了
封装HttpUtil 类,执行请求操作
public class HttpUtil {
public static void sendOkHttpRequest(String address,okhttp3.Callback callback){
Log.e("打印信息", "进入HttpUtil");
OkHttpClient client=new OkHttpClient();
Request request=new Request.Builder().url(address).build();
client.newCall(request).enqueue(callback);
}
}
封装Utility 类,json解析
public static DataBean handleDataResponse(String response){
if (!response.equals("")){
Gson gson=new Gson();
DataBean bean=gson.fromJson(response, DataBean.class);
Log.e("打印", "handleDataResponse: "+bean.toString() );
}
return null;
}
点击事件:
String url="http://gank.io/api/random/data/Android/1";
HttpUtil.sendOkHttpRequest(url, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
e(TAG, "onFailure: 失败" );
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String responseText=response.body().string();
Utility.handleDataResponse(responseText);
}
});
打印(如果打印不了,是不是你权限没加啊<uses-permission android:name="android.permission.INTERNET" />
):
12-29 14:01:48.791 29686-29863/com.example.lm.newsdemo E/打印: handleDataResponse: DataBean{error=false, results=[ResultsBean{_id='57179a5667765974fbfcf936', createdAt='2016-04-20T23:03:50.177Z', desc='图形编辑开源控件,支持自定义贴图 图片滤镜 图片旋转 以及图片剪裁操作', publishedAt='2016-04-21T11:41:00.247Z', source='chrome', type='Android', url='https://github.com/siwangqishiq/ImageEditor-Android', used=true, who='Jason'}]}
数据都有了,剩下的就是往View中填数据了
最后提个建议,如果自己要做一个客户端练手,可是又没有数据怎么办,其实《聚合数据》为我们提供数据,各种api,够学了,链接:https://www.juhe.cn/ (哎呀,不是打广告,不要打我—————–脸)