Android —— 接口学习之北京时间接口调用demo

小小小小小白的记录接口调用学习过程,为了感受一下接口调用的通信过程和理解json,纯属练手和学习,仅仅记录学习过程

内容比较基础简单,也适合和我一样安卓零基础的朋友参考~~

实现的功能简述:

调用北京时间的接口,通信获取json数据,然后把json数据转化为bean对象,最后将时间通过TextView显示

过程简述:

界面,导入OkHttp框架依赖库,写点击事件方法体

需要用到通信方法。可以参考https://www.jianshu.com/p/2663ce3da0db

 

 

下面进行详细记录

1.随便写一个Butoon响应点击事件:

笔记:下面这行代码的作用是:活动中不需要寻找该布局的id,不需要写setOnClickListener,直接写webClick(View view){  }方法

android:onClick="webClick"

2.要用Android框架OkHttp,所以需要导入依赖库

在app下的build.gradle中导入以下两行代码

implementation 'com.squareup.okhttp3:okhttp:3.14.1'
implementation 'com.squareup.okio:okio:2.2.2'

Android —— 接口学习之北京时间接口调用demo_第1张图片

(还不太会看开发文档,不太会用github,所以下面仅为github的用法学习笔记,可跳过)

Android —— 接口学习之北京时间接口调用demo_第2张图片

Android —— 接口学习之北京时间接口调用demo_第3张图片

下面同理添加okio的依赖(自行百度ikio库的概念)

Android —— 接口学习之北京时间接口调用demo_第4张图片

Android —— 接口学习之北京时间接口调用demo_第5张图片

3.重头戏来了——开始写webClick方法体

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)

解决办法:

加入下面这几行代码

Android —— 接口学习之北京时间接口调用demo_第6张图片

compileOptions {

    sourceCompatibility JavaVersion.VERSION_1_8

    targetCompatibility JavaVersion.VERSION_1_8

}

好的。。。。问题2,运行闪退

原因:忘记在AndroidManifest中配置网络权限了,只需要加上这行代码就OK

Android —— 接口学习之北京时间接口调用demo_第7张图片

点击按钮,问题3来了。。。不打印日志

将Log.d改成Log.i解决,但是不知道原因,有大佬知道的请指教~

Android —— 接口学习之北京时间接口调用demo_第8张图片

 

2)将返回的json数据转成bean对象

根据打印日志的内容我们知道返回的json有哪些参数值,然后根据这个参数值再写一个类

Android —— 接口学习之北京时间接口调用demo_第9张图片

 

 要用谷歌的Gson库,所以要先导入依赖

Android —— 接口学习之北京时间接口调用demo_第10张图片

代码:

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);
            }
        }
    });

}

 

运行报错

Android —— 接口学习之北京时间接口调用demo_第11张图片

 

这个报错的原因涉及到了一些底层的方法,我现在还不能理解,只知道应该用变量来接收一下json字符串,修改后的代码如下:

Android —— 接口学习之北京时间接口调用demo_第12张图片

 

3)将时间通过TextView显示

用 setText方法即可把数据显示到布局中

但是这里面涉及到了Handler

 

截图:

Android —— 接口学习之北京时间接口调用demo_第13张图片

 

本打算上传源码的,但是现在csdn不能设置免费的恭喜资源了!!

需要源码的留言,私发分享

你可能感兴趣的:(Android —— 接口学习之北京时间接口调用demo)