【转载】Android网络开发案例
android-network-case
介绍
android网络编程案例集
技术点
- android recyclerview
- Retrofit
- RxJava2
- Android RxJava2
- GSon
模块说明
- app模块演示基本的Retrofit使用
- 实现:通过网络访问获得天气预报信息 https://www.qqlykm.cn/api/api/tq.php
- 开发步骤:
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());}}); }
- 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 是授权值
- 使用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的开发步骤
- 引入相应包
// 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'
- 开放网络配置
略 - 创建json实体类
略 - 创建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();}});}
作业练习
- 调用阿里云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地址
- https://www.qqlykm.cn/api/api/tqw.php
- 测试地址:https://qqlykm.cn/api/api/tq.php?city=广州
- JSON格式化地址:https://www.json.cn/
【转载】Android网络开发案例相关推荐
- Android网络开发技术实战详解
<Android网络开发技术实战详解> 基本信息 作者: 朱桂英 丛书名: Android移动开发技术丛书 出版社:电子工业出版社 ISBN:9787121173493 上架时间:2012 ...
- 三、Android网络开发
传送门 <一.Android Studio的安装和使用> <二.Android界面开发> <三.Android网络开发> <四.狗狗大全应用实战> 视频 ...
- 《Android 网络开发与应用实战详解》——1.3节搭建Android应用开发环境
本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第1章,第1.3节搭建Android应用开发环境,作者 王东华,更多章节内容可以访问云栖社区"异步社区&qu ...
- 《Android 网络开发与应用实战详解》——2.3节Android系统架构
本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.3节Android系统架构,作者 王东华,更多章节内容可以访问云栖社区"异步社区"公 ...
- 《Android 网络开发与应用实战详解》——2.1节简析Android安装文件
本节书摘来自异步社区<Android 网络开发与应用实战详解>一书中的第2章,第2.1节简析Android安装文件,作者 王东华,更多章节内容可以访问云栖社区"异步社区" ...
- 【Android】Android应用开发案例教程
<Android应用开发案例教程(高等学校计算机科学与技术项目驱动案例实践规划教材)>应用"项目驱动(project-driven) "最新教学模式,通过完整的项目案例 ...
- android 网络开发相关资料
网络编程汇总: 1. http 基础知识和编程 http://www.jianshu.com/p/99dc1f8f62bf 2. socket udp tcp 区别与联系 http://jingy ...
- Android高手进阶教程(八)之----Android Widget开发案例(世界杯倒计时!)
今天我们要写一下Android Widget的开发,由于快点凌晨,我就不说的太具体了,同志们就模仿吧!首先看一下效果图: 下面是Demo的详细步骤: 一.新建一个Android工程命名为:Widget ...
- android 网络开发
反复研究了 Android Market,总结一下,之前发在新浪微博上,但不够详细,主要是提高用户体验. 1.网络异常处理,重试机制. 上wifi常常网络断开,那就看运用程序是否健壮.可以用Andro ...
- android 无网络处理布局,Android网络开发
1. WebView用法 ①布局文件新建一个WebView,特别注意线性布局和控件的宽高都要匹配父控件 xmlns:tools="http://schemas.android.com/too ...
最新文章
- python3编码和解码_python3的url编码和解码,自定义gbk、utf-8的例子
- linux 文本编辑命令grep sed awk
- mysql 5.7.18 winx64安装配置方法
- python内存池机制_看过来啦!教你用Python进行内存管理
- vs2010跟vs2008比较增加了哪些功能
- Android File数据存储
- redis数据类型语法及与java连接
- C# UDP通讯实例
- 计算机启动windows程序,win7系统开机自动运行程序怎么设置|win7电脑开机启动程序的方法...
- 微服务系统架构的演变
- 年薪 10 万的程序员,如何积累人生的第一个 100 万?
- [网络安全自学篇] 二.Chrome浏览器保留密码功能渗透解析及登录加密入门笔记
- mac 清理 -OmniDiskSweeper
- 机器学习 - Python Matplotlib 练习, 常见功能查阅
- 前端页面如果不放在statis等文件夹,想正常访问该如何解决
- 短视频高流量的秘诀,上热门全靠这些技巧
- 实战演练 | MySQL PROCESSLIST 表和 Navicat Monitor 识别慢速查询的简单方法
- SpringMVC学习笔记:springMVC中相关细节
- flutter 学习资源汇总
- CentOS7的虚拟机连不通网外解决方案