小小小小小白的记录接口调用学习过程,为了感受一下接口调用的通信过程和理解json,纯属练手和学习,仅仅记录学习过程
内容比较基础简单,也适合和我一样安卓零基础的朋友参考~~
实现的功能简述:
调用北京时间的接口,通信获取json数据,然后把json数据转化为bean对象,最后将时间通过TextView显示
过程简述:
界面,导入OkHttp框架依赖库,写点击事件方法体
需要用到通信方法。可以参考https://www.jianshu.com/p/2663ce3da0db
下面进行详细记录
笔记:下面这行代码的作用是:活动中不需要寻找该布局的id,不需要写setOnClickListener,直接写webClick(View view){ }方法
android:onClick="webClick"
在app下的build.gradle中导入以下两行代码
implementation 'com.squareup.okhttp3:okhttp:3.14.1'
implementation 'com.squareup.okio:okio:2.2.2'
(还不太会看开发文档,不太会用github,所以下面仅为github的用法学习笔记,可跳过)
下面同理添加okio的依赖(自行百度ikio库的概念)
1)北京时间接口通信
public void webClick(View view){
String url = "http://quan.suning.com/getSysTime.do";//这是苏宁的北京时间接口
OkHttpClient client = new OkHttpClient();//创建一个通讯对象
//创建一个Request
Request request = new Request.Builder()
.url(url)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//请求失败时回调的方法
Log.d("test","onFailure");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//请求成功时回调的方法
if(response.isSuccessful()){
Log.d("test","获取数据成功");
Log.d("test","responce.code()=="+response.code());
Log.d("test","response.body().string()=="+response.body().string());
}
}
});
}
这段代码可以打印出返回的json数据
遇到的报错情况:
Error: Invoke-customs are only supported starting with Android O (--min-api 26)
解决办法:
加入下面这几行代码
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
好的。。。。问题2,运行闪退
原因:忘记在AndroidManifest中配置网络权限了,只需要加上这行代码就OK
点击按钮,问题3来了。。。不打印日志
将Log.d改成Log.i解决,但是不知道原因,有大佬知道的请指教~
2)将返回的json数据转成bean对象
根据打印日志的内容我们知道返回的json有哪些参数值,然后根据这个参数值再写一个类
要用谷歌的Gson库,所以要先导入依赖
代码:
public void webClick(View view){
String url = "http://quan.suning.com/getSysTime.do";//这是苏宁的北京时间接口
OkHttpClient client = new OkHttpClient();//创建一个通讯对象
//创建一个Request
Request request = new Request.Builder()
.url(url)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
//请求失败时回调的方法
Log.d("test","onFailure");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
//请求成功时回调的方法
if(response.isSuccessful()){
Log.i("test","获取数据成功");
Log.i("test","responce.code()=="+response.code());
Log.i("test","response.body().string()=="+response.body().string());
Gson gson = new Gson();
//将json字符串response.body().string()转为bean对象
Bean bean = gson.fromJson(response.body().string(),Bean.class);
Log.i("test",bean.sysTime1);
Log.i("test",bean.sysTime2);
}
}
});
}
运行报错
这个报错的原因涉及到了一些底层的方法,我现在还不能理解,只知道应该用变量来接收一下json字符串,修改后的代码如下:
3)将时间通过TextView显示
用 setText方法即可把数据显示到布局中
但是这里面涉及到了Handler
截图:
本打算上传源码的,但是现在csdn不能设置免费的恭喜资源了!!
需要源码的留言,私发分享