系列目录
从零开始用Andrid Studio开发一个简单的垃圾分类查询APP(1)
从零开始用Andrid Studio开发一个简单的垃圾分类查询APP(2)
从零开始用Andrid Studio开发一个简单的垃圾分类查询APP(3)
从零开始用Andrid Studio开发一个简单的垃圾分类查询APP(4)-完结篇
正文
今天楼主继续带大家来改bug,啊,不对,来编程。
1.连接API(续)
又经过楼主半个小时的尝试,终于发现直接导致程序闪退的就是下列代码:
Okhttp_work.OkHttpGet(url_beauty, new Callback() {
@Override
public void onFailure(Call call, IOException e) {
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String content=response.body().string();
Message message=new Message();
message.what=1;
message.obj=content;
handler_beauty.sendMessageDelayed(message,1000);
}
});
关于Okhttp3包的部分,所以楼主去查了一下Okhttp3包导致程序闪退的问题,发现可能是由于楼主百度随便搜的Okhttp3包不兼容导致的闪退,而AS有自带的导入Okhttp3包的库,根本不用自己搜,只需要像我们之前一样添加一个依赖就可以自动下载了。
所以楼主当即更换成了4.10版本的Okhttp3,再次运行之后发现,程序好了一点,但是闪退和字还是没有变。
看了一下后台,发现没有发出申请,那我们的网络数据是发到哪里去了啊歪。
在楼主尝试把url改成https后,居然发送成功了,我们后台发现调用次数增加了,但是程序依然闪退,当楼主改content为newslist后,程序居然正常运行了!!!
原来是因为字符串错误导致的程序直接闪退,但是为什么AS下面的报告写着运行success。。。
而且问题来了,我们这里也不想显示这个啊!!
终于,经过楼主一个人自己瞎琢磨,期间参考了几个大佬的帖子,解决了这个问题:
这是经过修改后能使用的handler:
Handler handler_beauty=new Handler(new Handler.Callback() {
//首先通过handler发送信息
@Override
public boolean handleMessage(@NonNull Message msg) {
switch (msg.what){
case 0:
Toast.makeText(MainActivity.this,"网络错误",Toast.LENGTH_LONG).show();
break;
case 1:
String json=(String)msg.obj;
try{
JSONObject js=new JSONObject(json);
JSONArray newslist=js.getJSONArray("newslist");
String content=newslist.getString(0);
JSONObject js2=new JSONObject(content);
String content2=js2.getString("content");
tv_beauty.setText(content2);
break;
}catch (JSONException e){
e.printStackTrace();
}
default:
throw new IllegalStateException("Unexpected value: " + msg.what);
}
return false;
}
});
好了!现在我们学会了怎么连接API,并且学会了怎么使用JSON,关于JSON,大家可以看这个帖子:JAVA生成与解析带中括号的JSON数据,不过具体怎么操作还是要自己悟出来啊。
这里再附上我们的计时器:
private Handler handler_time=new Handler();
private Runnable task=new Runnable() {
@Override
public void run