1、准备材料:

  • Retrofit2、0  
  • RXJava2、0
  • // Android 支持 Rxjava// 此处一定要注意使用RxJava2的版本    compile 'io.reactivex.rxjava2:rxjava:2.0.1'    compile 'io.reactivex.rxjava2:rxandroid:2.0.1'// Android 支持 Retrofit    compile 'com.squareup.retrofit2:retrofit:2.1.0'// 衔接 Retrofit & RxJava// 此处一定要注意使用RxJava2的版本    compile 'com.jakewharton.retrofit:retrofit2-rxjava2-adapter:1.0.0'// 支持Gson解析    compile 'com.squareup.retrofit2:converter-gson:2.1.0'//    compile 'com.squareup.okhttp3:okhttp:3.4.1'    compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'


2、首先我们来叙说一下Retrofit的基本概念:

  • 定义:一个Restful设计风格的HTTP网络请求框架、基于okhttp
  • 作者:square公司
  • 功能:支持同步,异步网络请求,多种数据格式解析,提供对RXJava支持

 3、然后呢我们在回顾一下RXJava基本概念:

  • 定义:RXJava是一个基于事件流,实现异步操作的库
  • 作用:实现异步操作,类似于Android中的AsyncTask和Handler的作用
  • 优点:基于事件流的链式调用——逻辑简洁,实现优雅,使用简单;随着程序逻辑的复杂性提高它依然能够保持简洁的风格

4、基本使用:访问金山词霸的翻译接口

  • build.gradle(项目model中的)中添加依赖
  • 创建接收服务器返回数据的JavaBean
  • 创建用于描述网络请求的接口
  • 创建Retrofit实例
  • 创建网络请求接口实例 配置网络请求参数
  • 发送网络请求
  • 对返回的数据进行处理

5、添加 网络权限--清单文件里

1、金山词霸API的数据格式说明:

// URL模板http://fy.iciba.com/ajax.php// URL实例http://fy.iciba.com/ajax.php?a=fy&f=auto&t=auto&w=hello%20world// 参数说明:// a:固定值 fy// f:原文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto// t:译文内容类型,日语取 ja,中文取 zh,英语取 en,韩语取 ko,德语取 de,西班牙语取 es,法语取 fr,自动则取 auto// w:查询内容

json格式说明

/**     * status:请求成功则返回1     * content:内容信息     * form:原文内容类型     * to:译文内容类型     * vendor:来源平台     * out:译文内容     * err_no:请求成功时取0     * */    {        "status":1,            "content":{                "from":"en-Eu",                "to":"zh-CN",                "vendor":"baidu",                "out":"你好世界
", "err_no":0, } }

JavaBean:示例

public class Translation {    private int status;    private content content;    private static class content {        private String from;        private String to;        private String vendor;        private String out;        private int errNo;    }    //定义 输出返回数据 的方法    public void show() {        System.out.println( "Rxjava翻译结果:" + status);        System.out.println("Rxjava翻译结果:" + content.from);        System.out.println("Rxjava翻译结果:" + content.to);        System.out.println("Rxjava翻译结果:" + content.vendor);        System.out.println("Rxjava翻译结果:" + content.out);        System.out.println("Rxjava翻译结果:" + content.errNo);    }}

创建用于描述网络请求的接口:

/** * Created by com_c on 2018/3/27. */public interface GetRequest_Interface {    @FormUrlEncoded    @POST("ajax.php?a=fy&f=auto&t=auto")    Observable getCall(            @Field("w") String context    );}

单例模式创建Retrofit

//create RetrofitAPI    public static GetRequest_Interface createrApi() {        if (retrofit == null) {            synchronized (RetrofitUtils.class) {                if (retrofit == null) {                    //打印服务器请求头                    HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();                    interceptor.setLevel(HttpLoggingInterceptor.Level.BODY);                    //okhttp client                    OkHttpClient client = new OkHttpClient.Builder()                            .addInterceptor(interceptor)                            .addNetworkInterceptor(interceptor)                            .connectTimeout(5, TimeUnit.SECONDS)                            .readTimeout(5, TimeUnit.SECONDS)                            .writeTimeout(5, TimeUnit.SECONDS)                            .retryOnConnectionFailure(true)                            .build();                    //Retrofit 实例化并返回                    retrofit = new Retrofit.Builder()                            .baseUrl(BASE_URL)                            .client(client)                            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())                            .addConverterFactory(GsonConverterFactory.create(new Gson()))                            .build();                }            }        }        return retrofit.create(GetRequest_Interface.class);    }

使用网络请求

retrofit.getCall(content)                .subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Observer() {                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onComplete() {                    }                    @Override                    public void onSubscribe(Disposable d) {                    }                    @Override                    public void onNext(Translation translation) {                        tvName.setText(translation.show().toString());                    }                });

更多相关文章

  1. Android中的几种网络请求方式详解
  2. android 技术点记录
  3. android 获取网络资源
  4. Could not resolve org.jetbrains.kotlin:kotlin-gradle-plugin:
  5. Android使用DefaultHttpClient访问Wap网络
  6. Android之判断是否有网封装类
  7. Android必须要掌握的东西
  8. 教你如何开关Android的APN网络
  9. Android(安卓)与javaEE后台网络链接测试

随机推荐

  1. android屏幕适配,自动生成不同的dimens.xm
  2. android 常见分辨率(mdpi、hdpi 、xhdpi、
  3. android View 绘制流程 和 事件传递
  4. 教你如何开关Android的APN网络
  5. 系统角度解读Android(安卓)P新特性
  6. Android TensorFlow 智能语音识别
  7. Android不用OnScrollListener采用Gesture
  8. Android中Market的Loading效果实现方法
  9. Android(安卓)ViewDragHelper及移动处理
  10. Android应用程序目录定义及使用方法