RxAndroid之简单网络请求,数据操作
来源:互联网 发布:儿童摄影网络推广 编辑:程序博客网 时间:2024/04/28 08:22
查看项目请点击这里:项目地址
这里主要是数据操作和简单的网络请求。
先看一下数据操作吧,这里基本讲解都一样,我是按照官网的demo加上看的资料写的
package com.fanyafeng.rxandroid.activity;import android.content.Intent;import android.os.Bundle;import android.provider.Settings;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.view.View;import com.fanyafeng.rxandroid.BaseActivity;import com.fanyafeng.rxandroid.R;import rx.Observable;import rx.functions.Action1;public class RxAndroidActivity extends BaseActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rx_android); title = "测试rxandroid"; FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); initView(); initData(); } private void initView() { } private void initData() { hello("Fan", "Ya", "Feng"); hello("Beijing", "Chaoyang"); } public static void hello(String... names) { Observable.from(names).subscribe(new Action1<String>() { @Override public void call(String s) { System.out.println("Hello " + s + "!"); } }); for (int i = 0; i < names.length; i++) { System.out.println(names[i]); } for (String s : names) { System.out.println(s); } Observable.from(names).subscribe(s -> { System.out.println("Hello " + s + "!"); }); } @Override public void onClick(View v) { super.onClick(v); switch (v.getId()) { case R.id.btnToAndroid: startActivity(new Intent(this, RxToActivity.class)); break; case R.id.btnRxDeal: startActivity(new Intent(this, RxDealDataActivity.class)); break; case R.id.btnLambda: startActivity(new Intent(this, LambdaActivity.class)); break; case R.id.btnNetArgs: startActivity(new Intent(this, NetArgsActivity.class)); break; } }}
主要方便的地方还是批处理,还有就是链式请求,很方便
package com.fanyafeng.rxandroid.activity;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.View;import android.widget.TextView;import android.widget.Toast;import com.fanyafeng.rxandroid.BaseActivity;import com.fanyafeng.rxandroid.R;import rx.Observable;import rx.Observer;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action1;import rx.schedulers.Schedulers;public class RxToActivity extends BaseActivity { private TextView tvSubText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_rx_to); title = "RxAndroid跳转界面"; FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); initView(); initData(); } private void initView() { tvSubText = (TextView) findViewById(R.id.tvSubText); } private void initData() { } private void initData1() { Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { } }; Subscriber<String> subscriber = new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { } }; //注册观察活动 Observable<String> stringObservable = Observable.create(onSubscribe); //分发订阅信息 stringObservable.observeOn(AndroidSchedulers.mainThread()); stringObservable.subscribe(textSubscriber); stringObservable.subscribe(toastSubscriber); hello("Fan", "Ya", "Feng"); hello("Beijing", "Chaoyang"); Observable observable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onStart(); //创建一个有序的list,onnext会依次调用 subscriber.onNext(hello("nihao")); subscriber.onCompleted(); } }); } private void hello(String... names) { Observable.from(names).subscribe(new Action1<String>() { @Override public void call(String s) {// System.out.println("Hello " + s + "!"); String s1 = tvSubText.getText().toString().trim(); tvSubText.setText(s1 + s); } }); } Observable.OnSubscribe onSubscribe = new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext(hello("World"));//发送事件 subscriber.onCompleted();//事件完成 } }; Subscriber<String> toastSubscriber = new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { Toast.makeText(RxToActivity.this, s, Toast.LENGTH_SHORT).show(); } }; @Override public void onClick(View v) { super.onClick(v); switch (v.getId()) { case R.id.btnOperate1: operate1(); break; case R.id.btnOperate2: operate2(); break; } } private void operate2() { Observable<String> stringObservable = Observable.just("Hello","World"); stringObservable.subscribe(new Action1<String>() { @Override public void call(String s) { Log.d("rxto", s); tvSubText.setText(s); } }); } private void operate1() { //注册观察活动 Observable<String> stringObservable = Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { subscriber.onNext(hello("Hello World"));//发送事件 subscriber.onCompleted();//事件完成 } });// stringObservable.observeOn(AndroidSchedulers.mainThread());// stringObservable.observeOn(Schedulers.io());// stringObservable.observeOn(Schedulers.computation());// stringObservable.observeOn(Schedulers.newThread()); stringObservable.subscribe(textSubscriber);//有更新ui的默认主线程,不用去指定线程 } private String hello(String names) { Log.d("rxto", names); return names; } //订阅者,接受字符串,修改控件 Subscriber<String> textSubscriber = new Subscriber<String>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(String s) { tvSubText.setText(s); } };}
是不是感觉在更新一个ui的情况下很麻烦,命名一行就能解决的,可是麻烦好多,他这里提供了几个简单啊的封装方法
//更新ui控件 private Action1<String> textAction = new Action1<String>() { @Override public void call(String s) { tvDealData.setText(tvDealData.getText().toString() + s); } }; private Action1<IpInfoBean> ipInfoBeanAction1 = new Action1<IpInfoBean>() { @Override public void call(IpInfoBean ipInfoBean) { tvDealData1.setText(ipInfoBean.country); } }; private Action1<String> toastAction = new Action1<String>() { @Override public void call(String s) { Toast.makeText(RxDealDataActivity.this, s, Toast.LENGTH_SHORT).show(); } }; private Action1<IpInfoBean> ipInfoToastAction = ipInfoBean -> Toast.makeText(RxDealDataActivity.this, ipInfoBean.country, Toast.LENGTH_SHORT).show(); private Func1<List<String>, Observable<String>> oneLetterFunc = new Func1<List<String>, Observable<String>>() { @Override public Observable<String> call(List<String> strings) { return Observable.from(strings); } }; private Func1<List<IpInfoBean>, Observable<IpInfoBean>> getIpInfoFunc = ipInfoBeen -> Observable.from(ipInfoBeen); private Func1<List<IpInfoBean>, Observable<IpInfoBean>> ipInfoFunc = new Func1<List<IpInfoBean>, Observable<IpInfoBean>>() { @Override public Observable<IpInfoBean> call(List<IpInfoBean> ipInfoBeen) { return Observable.from(ipInfoBeen); } };
可是尝试一下,基本上rxjava我感觉还是在批处理上有优势,再来看retrofit的网络请求处理
这里用的淘宝的请求ip接口
package com.fanyafeng.rxandroid.activity;import android.content.Intent;import android.os.Bundle;import android.support.design.widget.FloatingActionButton;import android.support.design.widget.Snackbar;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.Toolbar;import android.util.Log;import android.view.View;import android.widget.TextView;import com.fanyafeng.rxandroid.BaseActivity;import com.fanyafeng.rxandroid.R;import com.fanyafeng.rxandroid.netutil.Urls;import com.fanyafeng.rxandroid.retrofit.response.TaoBaoGetIpInfoResponse;import com.fanyafeng.rxandroid.retrofit.service.ApiService;import retrofit.Call;import retrofit.Callback;import retrofit.GsonConverterFactory;import retrofit.Response;import retrofit.Retrofit;public class RetrofitActivity extends BaseActivity { private TextView tvShowInfo; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_retrofit); title = "测试Retrofit"; FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } }); initView(); initData(); } private void initView() { tvShowInfo = (TextView) findViewById(R.id.tvShowInfo); } private void initData() { } @Override public void onClick(View v) { super.onClick(v); switch (v.getId()) { case R.id.btnSendRequest: getData(); break; } } private void getData() { Retrofit retrofit = new Retrofit.Builder() .addConverterFactory(GsonConverterFactory.create()) .baseUrl(Urls.URL_TAOBAO_BASET) .build(); ApiService apiService = retrofit.create(ApiService.class); Call<TaoBaoGetIpInfoResponse> getIpInfoResponseCall = apiService.getIpInfoBean("63.223.108.42"); getIpInfoResponseCall.enqueue(new Callback<TaoBaoGetIpInfoResponse>() { @Override public void onResponse(Response<TaoBaoGetIpInfoResponse> response, Retrofit retrofit) { Log.d("main", response.body().data.toString()); TaoBaoGetIpInfoResponse getIpInfoResponse = response.body(); tvShowInfo.setText(getIpInfoResponse.data.country); } @Override public void onFailure(Throwable t) { tvShowInfo.setText(t.getMessage()); } }); }}
怎么样是不是用的很顺畅,而且对处理结果封装的也很好
下面是api接口
package com.fanyafeng.rxandroid.retrofit.service;import com.fanyafeng.rxandroid.retrofit.response.TaoBaoGetIpInfoResponse;import retrofit.Call;import retrofit.http.GET;import retrofit.http.Query;import rx.Observable;/** * Created by 365rili on 16/6/16. */public interface ApiService { @GET("/service/getIpInfo.php") Call<TaoBaoGetIpInfoResponse> getIpInfoBean(@Query("ip") String ip); // 下方测试 @GET("/token") Observable<String> getToken(); @GET("/user") Observable<TaoBaoGetIpInfoResponse> getIpinfoBean(@Query("token") String token, @Query("ip") String ip);}
0 0
- RxAndroid之简单网络请求,数据操作
- RxAndroid+OKHttp进行网络请求下载操作案例
- 优雅的构建Android项目之RxAndroid+Retrofit网络请求
- RxAndroid+Retorfit实现数据请求
- Rxjava与Rxandroid结合实现网络请求
- Retrofit + Rxjava + RxAndroid实现网络请求
- 网络请求数据之AsyncTask
- Httpclient之网络请求数据
- HttpClient之网络请求数据
- RxAndroid/RxJava之初识RxAndroid简单方法示例
- MVP-简单的OkHttp网络请求数据
- Kotlin简单网络请求及数据解析
- retrofit-rxAndroid-最快最好用的网络请求框架
- iOS之网络请求的简单封装
- Android网络请求之OKHttp简单讲解
- 微信小程序之网络请求简单封装
- Android网络框架xUtils的Http网络数据请求操作
- android网络数据请求之HttpClient
- 大型企业正则表达式验证应用
- :>/dev/null 2>&1 的作用
- 第十五周OJ(4)两个字符串连接
- 模板方法模式
- 中国之技术弱点
- RxAndroid之简单网络请求,数据操作
- jackson反序列化时忽略不需要的字段
- ACM篇:POJ 1139 -- Cat and Mouse
- ionic上拉加载更多解决方法
- 【C#MVC】C#中将文件夹压缩然后下载
- 解决Python import “No module named ”问题
- Android 生成keystore jarsigner签名及解决找不到证书链的问题
- 【matlab】显示多张图
- 微信小程序数据存储与取值