retrofit(2)get请求
public class MainActivity extends AppCompatActivity { // 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:查询内容 private static final String TAG = "Rxjava"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate( savedInstanceState ); setContentView( R.layout.activity_main ); //步骤4:创建Retrofit对象 Retrofit retrofit = new Retrofit.Builder() .baseUrl("http://fy.iciba.com/ajax.php/") // 设置 网络请求 Url .addConverterFactory( GsonConverterFactory.create()) //设置使用Gson解析(记得加入依赖) .addCallAdapterFactory( RxJava2CallAdapterFactory.create()) // 支持RxJava .build(); // 步骤5:创建 网络请求接口 的实例 final GetRequest_Interface request = retrofit.create(GetRequest_Interface.class); // 步骤6:采用Observable<...>形式 对 网络请求 进行封装 Observable<Translation> observable = request.getCall(); // 步骤7:发送网络请求 observable.subscribeOn( Schedulers.io()) // 在IO线程进行网络请求 .observeOn( AndroidSchedulers.mainThread()) // 回到主线程 处理请求结果 .subscribe(new Observer<Translation>() { @Override public void onSubscribe(Disposable d) { Log.d(TAG, "开始采用subscribe连接"); } @Override public void onNext(Translation result) { // 步骤8:对返回的数据进行处理 Log.d(TAG, "请求成功"+request); result.show() ; } @Override public void onError(Throwable e) { Log.d(TAG, "请求失败"); } @Override public void onComplete() { Log.d(TAG, "请求完成"); } }); } }
public interface GetRequest_Interface { @GET("ajax.php?a=fy&f=auto&t=auto&w=hello%20world") Observable<Translation> getCall(); // 注解里传入 网络请求 的部分URL地址 // Retrofit把网络请求的URL分成了两部分:一部分放在Retrofit对象里,另一部分放在网络请求接口里 // 如果接口里的url是一个完整的网址,那么放在Retrofit对象里的URL可以忽略 // 采用Observable<...>接口 // getCall()是接受网络请求数据的方法 }
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); } }
Rxjava的map函数传入一个带两个参数的泛型,第一个泛型是规定的返回值,第二个泛型是对第一个泛型的映射,也就是解析第一个泛型然后返回回去.
Rxjava的compose函数规定线程运行的规则,简化代码
//处理线程调度的变换 public static ObservableTransformer schedulersTransformer = new ObservableTransformer() { @Override public ObservableSource apply(Observable upstream) { return ((Observable) upstream).subscribeOn(Schedulers.io()) .unsubscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()); } };
Observable.compose(schedulersTransformer)
浙公网安备 33010602011771号