android-network-case

介绍

android网络编程案例集

技术点

  1. android recyclerview
  2. Retrofit
  3. RxJava2
  4. Android RxJava2
  5. GSon

模块说明

  1. app模块演示基本的Retrofit使用

    1. 实现:通过网络访问获得天气预报信息 https://www.qqlykm.cn/api/api/tq.php
    2. 开发步骤:

      2.1 引入相关依赖

    implementation 'com.squareup.retrofit2:retrofit:2.0.2'
    // https://mvnrepository.com/artifact/com.squareup.retrofit2/converter-scalars
    implementation group: 'com.squareup.retrofit2', name: 'converter-scalars', version: '2.3.0'
    // 用Gson解析json的转换器
    implementation 'com.squareup.retrofit2:converter-gson:2.0.2'
    

    2.2 开启网络请求权限(AndroidManifest.xml)

    <!--网络权限-->
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    

    2.3 封装json响应类

    2.4 封装服务接口(核心)

    public interface GetTianQiServiceApi {@HTTP(method = "GET",path = "/api/api/tq.php",hasBody = false)
    public Call<TianQiResponse> getData(@Query("city") String city);
    }
    

    2.5 调用接口并返回响应信息(Activity中核心代码)

        private void exec(){//1.创建Retrofix对象Retrofit retrofit = new Retrofit.Builder().baseUrl("https://www.qqlykm.cn/").addConverterFactory(GsonConverterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).build();//2.获得serviceGetTianQiServiceApi service = retrofit.create(GetTianQiServiceApi.class);//3.调用接口方法Call<TianQiResponse> res = service.getData("济南");//4.返回响应并解析res.enqueue(new Callback<TianQiResponse>() {@Overridepublic void onResponse(Call<TianQiResponse> call, Response<TianQiResponse> response) {Log.i("kkkk",response.body().getDesc());}@Overridepublic void onFailure(Call<TianQiResponse> call, Throwable t) {Log.e("yyy",t.getMessage());}});
    }
    
  2. app模块中包含了调用阿里云API市场的案例
public interface CheckMobileNullApiService {@HTTP(method = "GET",path = "/mobile_empty",hasBody = false)public Call<CheckMobileResponse> getData(@Query("mobile") String mobile, @Header("Authorization") String appCode);
}

说明:此api需要在报文头中加入appCode,所以使用了@ Header(“Authorization”)

        Retrofit retrofit = new Retrofit.Builder().baseUrl("https://slymempt.market.alicloudapi.com").addConverterFactory(GsonConverterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).build();CheckMobileNullApiService service = retrofit.create(CheckMobileNullApiService.class);Call<CheckMobileResponse> res = service.getData(checkMobile,"APPCODE 1c3202fa92cae4923f004844");

其中APPCODE 1c3202fa92cae4923f004844 是授权值

  1. 使用post发送请求
  • 使用@post注解
  • 使用@FormUrlEncoded注解
  • 参数注解改为:@Field,而非get方式的@Query
    其他与@get一致

eg:

    @FormUrlEncoded@POST("/isbn/query")public Call<ISBNResponse> getData(@Field("isbn") String isbn,@Header("Authorization") String appCode);
原理
  • async,handler
  • okhttp3,retrofit2
  • RxJava2




基于RxJava2+Retrofit的开发步骤
  1. 引入相应包
    // https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxjavaimplementation group: 'io.reactivex.rxjava2', name: 'rxjava', version: '2.2.19'// https://mvnrepository.com/artifact/com.squareup.retrofit2/adapter-rxjava2implementation group: 'com.squareup.retrofit2', name: 'adapter-rxjava2', version: '2.3.0'// https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxandroidimplementation group: 'io.reactivex.rxjava2', name: 'rxandroid', version: '2.0.1'
  1. 开放网络配置
  2. 创建json实体类
  3. 创建api service接口
    @FormUrlEncoded@POST("/isbn/query")    public Observable<ISBNResponse> getDataForRxJava2(@Field("isbn") String isbn,@Header("Authorization") String appCode);

返回被观察者(Observable)
5. 在activity中异步调用

    public void exec4ForRxJava2(String isbn){Retrofit retrofit = new Retrofit.Builder().baseUrl("https://jisuisbn.market.alicloudapi.com").addConverterFactory(GsonConverterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();ISBNServiceApi api = retrofit.create(ISBNServiceApi.class);api.getDataForRxJava2(isbn,"APPCODE 1c3202fe6fd94e0a92cae4923f004844").observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Observer<ISBNResponse>() {@Overridepublic void onSubscribe(Disposable d) {}@Overridepublic void onNext(ISBNResponse isbnResponse) {Toast.makeText(MainActivity.this,isbnResponse.getMsg(),Toast.LENGTH_SHORT).show();}@Overridepublic void onError(Throwable e) {Log.e("kkzzjjj",e.getMessage());}@Overridepublic void onComplete() {Log.i("complete","okikikkkkk");}});}

或者

    public void exec4ForRxJava2(String isbn){Retrofit retrofit = new Retrofit.Builder().baseUrl("https://jisuisbn.market.alicloudapi.com").addConverterFactory(GsonConverterFactory.create()).addConverterFactory(ScalarsConverterFactory.create()).addCallAdapterFactory(RxJava2CallAdapterFactory.create()).build();ISBNServiceApi api = retrofit.create(ISBNServiceApi.class);api.getDataForRxJava2(isbn,"APPCODE 1c3202fe6fd94e0a92cae4923f004844").observeOn(AndroidSchedulers.mainThread()).subscribeOn(Schedulers.io()).subscribe(new Consumer<ISBNResponse>() {@Overridepublic void accept(ISBNResponse isbnResponse) throws Exception {Toast.makeText(MainActivity.this,isbnResponse.getMsg(),Toast.LENGTH_SHORT).show();}});}
作业练习
  1. 调用阿里云API市场(https://market.aliyun.com/products/57126001/cmapi013556.html?spm=5176.78296.J_3771263310.1.bd9d5d76bii2QK#sku=yuncode755600000)完成练习.

自建API调用

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>android:usesCleartextTraffic="true"

第三方api地址

  1. https://www.qqlykm.cn/api/api/tqw.php
  2. 测试地址:https://qqlykm.cn/api/api/tq.php?city=广州
  3. JSON格式化地址:https://www.json.cn/

【转载】Android网络开发案例相关推荐

  1. Android网络开发技术实战详解

    <Android网络开发技术实战详解> 基本信息 作者: 朱桂英 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121173493 上架时间:2012 ...

  2. 三、Android网络开发

    传送门 <一.Android Studio的安装和使用> <二.Android界面开发> <三.Android网络开发> <四.狗狗大全应用实战> 视频 ...

  3. 《Android 网络开发与应用实战详解》——1.3节搭建Android应用开发环境

    本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第1章,第1.3节搭建Android应用开发环境,作者 王东华,更多章节内容可以访问云栖社区"异步社区&qu ...

  4. 《Android 网络开发与应用实战详解》——2.3节Android系统架构

    本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.3节Android系统架构,作者 王东华,更多章节内容可以访问云栖社区"异步社区"公 ...

  5. 《Android 网络开发与应用实战详解》——2.1节简析Android安装文件

    本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.1节简析Android安装文件,作者 王东华,更多章节内容可以访问云栖社区"异步社区" ...

  6. 【Android】Android应用开发案例教程

    <Android应用开发案例教程(高等学校计算机科学与技术项目驱动案例实践规划教材)>应用"项目驱动(project-driven) "最新教学模式,通过完整的项目案例 ...

  7. android 网络开发相关资料

    网络编程汇总: 1. http 基础知识和编程 http://www.jianshu.com/p/99dc1f8f62bf 2. socket  udp  tcp 区别与联系 http://jingy ...

  8. Android高手进阶教程(八)之----Android Widget开发案例(世界杯倒计时!)

    今天我们要写一下Android Widget的开发,由于快点凌晨,我就不说的太具体了,同志们就模仿吧!首先看一下效果图: 下面是Demo的详细步骤: 一.新建一个Android工程命名为:Widget ...

  9. android 网络开发

    反复研究了 Android Market,总结一下,之前发在新浪微博上,但不够详细,主要是提高用户体验. 1.网络异常处理,重试机制. 上wifi常常网络断开,那就看运用程序是否健壮.可以用Andro ...

  10. android 无网络处理布局,Android网络开发

    1. WebView用法 ①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件 xmlns:tools="http://schemas.android.com/too ...

最新文章

  1. python3编码和解码_python3的url编码和解码,自定义gbk、utf-8的例子
  2. linux 文本编辑命令grep sed awk
  3. mysql 5.7.18 winx64安装配置方法
  4. python内存池机制_看过来啦!教你用Python进行内存管理
  5. vs2010跟vs2008比较增加了哪些功能
  6. Android File数据存储
  7. redis数据类型语法及与java连接
  8. C# UDP通讯实例
  9. 计算机启动windows程序,win7系统开机自动运行程序怎么设置|win7电脑开机启动程序的方法...
  10. 微服务系统架构的演变
  11. 年薪 10 万的程序员,如何积累人生的第一个 100 万?
  12. [网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
  13. mac 清理 -OmniDiskSweeper
  14. 机器学习 - Python Matplotlib 练习, 常见功能查阅
  15. 前端页面如果不放在statis等文件夹,想正常访问该如何解决
  16. 短视频高流量的秘诀,上热门全靠这些技巧
  17. 实战演练 | MySQL PROCESSLIST 表和 Navicat Monitor 识别慢速查询的简单方法
  18. SpringMVC学习笔记:springMVC中相关细节
  19. flutter 学习资源汇总
  20. CentOS7的虚拟机连不通网外解决方案

热门文章

  1. TortoiseSVN - Download下载 - 1.5.4
  2. appuim+python自动化测试计算器实例
  3. 项目详细设计开发文档
  4. 基于微信小程序的点餐系统
  5. 20_星仔带你学Java之Java常用类
  6. 斐讯K2从第三方固件刷回原厂固件
  7. Java中随机生成32位字符串
  8. java整数int的32位输出
  9. 服务器电源的电源管理芯片,TI推出新款IC PMBus 管理及保护服务器电源
  10. 【CSDN软考VIP资料群】让软考通过更容易,软考资料大全支持你软考!