【转载】Android网络开发案例

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.获得service
        GetTianQiServiceApi service = retrofit.create(GetTianQiServiceApi.class);
        //3.调用接口方法
        Call<TianQiResponse> res = service.getData("济南");
        //4.返回响应并解析
        res.enqueue(new Callback<TianQiResponse>() {
            @Override
            public void onResponse(Call<TianQiResponse> call, Response<TianQiResponse> response) {
                Log.i("kkkk",response.body().getDesc());
            }
    
            @Override
            public 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
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-f7lNIx6O-1654693859896)(imgs/rxjava2/1.jpg)]
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
基于RxJava2+Retrofit的开发步骤
  1. 引入相应包
    // https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxjava
    implementation group: 'io.reactivex.rxjava2', name: 'rxjava', version: '2.2.19'
    // https://mvnrepository.com/artifact/com.squareup.retrofit2/adapter-rxjava2
    implementation group: 'com.squareup.retrofit2', name: 'adapter-rxjava2', version: '2.3.0'
    // https://mvnrepository.com/artifact/io.reactivex.rxjava2/rxandroid
    implementation 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>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                    }

                    @Override
                    public void onNext(ISBNResponse isbnResponse) {
                        Toast.makeText(MainActivity.this,isbnResponse.getMsg(),Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.e("kkzzjjj",e.getMessage());
                    }

                    @Override
                    public 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>() {
                    @Override
                    public 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/
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值