柚子快報(bào)邀請(qǐng)碼778899分享:android RxJava
柚子快報(bào)邀請(qǐng)碼778899分享:android RxJava
目錄
1 RxJAVA簡(jiǎn)介
1 什么是RxJava
2.RxJava好在哪
3.什么是觀察者模式?
4.RxJava原理理解
5.實(shí)例
2.Retrofit+OkHTTP+RxJava+RecycleView的實(shí)現(xiàn)步驟
第一步:創(chuàng)建項(xiàng)目
第二步:導(dǎo)入依賴
第三步:添加網(wǎng)絡(luò)權(quán)限
第四步:在activity_main.xml添加Recycle,并給其設(shè)置id
第五步:創(chuàng)建子布局
第六步:創(chuàng)建實(shí)體類
第七步:創(chuàng)建適配器
第八步:設(shè)置適配器
第九步:進(jìn)行網(wǎng)絡(luò)請(qǐng)求
1 RxJAVA簡(jiǎn)介
1 什么是RxJava
????????我對(duì)它的定義是:RxJava
本質(zhì)上是一個(gè)異步操作庫(kù),是一個(gè)能讓你用極其簡(jiǎn)潔的邏輯去處理繁瑣復(fù)雜任務(wù)的異步事件庫(kù)。
2.RxJava好在哪
????????Android平臺(tái)上為已經(jīng)開(kāi)發(fā)者提供了
AsyncTask,Handler
等用來(lái)做異步操作的類庫(kù),那我們?yōu)槭裁催€要選 擇RxJava
呢?答案是簡(jiǎn)潔!
RxJava
可以用非常簡(jiǎn)潔的代碼邏輯來(lái)解決復(fù)雜問(wèn)題;而且即使業(yè)務(wù)邏輯的越來(lái)越復(fù)雜,它依然能夠保持簡(jiǎn)潔!再配合上Lambda
用簡(jiǎn)單的幾行代碼分分鐘就解決你負(fù)責(zé)的業(yè)務(wù)問(wèn)題。
3.什么是觀察者模式?
????????舉個(gè)栗子,Android
中
View
的點(diǎn)擊監(jiān)聽(tīng)器的實(shí)現(xiàn),
View
是被觀察者,
OnClickListener
對(duì)象是觀察者, Activity要如何知道
View
被點(diǎn)擊了?那就是派一個(gè)
OnClickListener
對(duì)象,入駐
View
,與
View
達(dá)成一個(gè)訂 閱關(guān)系,一旦View
被點(diǎn)擊了,就通過(guò)
OnClickListener
對(duì)象的
OnClick
方法傳達(dá)給
Activity
。采用觀察者模式可以避免去輪詢檢查,節(jié)約有限的cpu
資源。
4.RxJava原理理解
????????被觀察者通過(guò)訂閱將事件按順序依次傳遞給觀察者?
5.實(shí)例
1.
建立被觀察者
(
Observable
)
&
生產(chǎn)事件
2.
建立觀察者
(
Observer
)
并 定義響應(yīng)事件的行為
3.
經(jīng)過(guò)訂閱
(
Subscribe
)
鏈接觀察者和被觀察者
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//建立觀察者 向被觀察者發(fā)送消息
Observable observable=Observable.create(new ObservableOnSubscribe
@Override
public void subscribe(ObservableEmitter
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();
}
});
//建立被觀察者 接收觀察者的消息進(jìn)行處理
Observer observer=new Observer() {
@Override
public void onSubscribe(Disposable d) {
Log.i("onSubscribe","開(kāi)始連接");
}
@Override
public void onNext(Object o) {
Log.i("onNext","接收到的值是"+o);
}
@Override
public void onError(Throwable e) {
Log.i("onError","失敗");
}
@Override
public void onComplete() {
Log.i("onComplete","完成");
}
};
//被觀察者向觀察者進(jìn)行訂閱
observable.subscribe(observer);
}
}
2.Retrofit+OkHTTP+RxJava+RecycleView的實(shí)現(xiàn)步驟
第一步:創(chuàng)建項(xiàng)目
第二步:導(dǎo)入依賴
//for rxjava
implementation 'io.reactivex.rxjava2:rxjava:2.2.6'
//for rxandroid
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
//銜接 Retrofit & RxJava,此處一定要注意使用RxJava2的版本
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
//添加Retrofit依賴
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
//添加Gson解析
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
//添加圖片加載庫(kù)依賴
implementation 'com.github.bumptech.glide:glide:4.12.0'
第三步:添加網(wǎng)絡(luò)權(quán)限
第四步:在activity_main.xml添加Recycle,并給其設(shè)置id
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity2" android:padding="15dp" android:orientation="vertical"> android:id="@+id/rv_news" android:layout_width="match_parent" android:layout_height="match_parent" />
第五步:創(chuàng)建子布局
android:layout_width="match_parent" android:layout_height="150dp" xmlns:app="http://schemas.android.com/apk/res-auto" app:cardElevation="5dp" app:cardCornerRadius="5dp" android:layout_marginTop="10dp"> android:layout_width="match_parent" android:layout_height="140dp" android:layout_margin="5dp"> android:id="@+id/news_pic" android:scaleType="fitXY" android:layout_width="140dp" android:layout_height="140dp" app:srcCompat="@drawable/ic_launcher_background" /> android:id="@+id/news_title" android:layout_toRightOf="@+id/news_pic" android:layout_marginStart="20dp" android:textSize="16sp" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" /> android:id="@+id/news_desc" android:layout_marginTop="20dp" android:layout_alignLeft="@+id/news_title" android:layout_below="@+id/news_title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView" />
第六步:創(chuàng)建實(shí)體類
package com.hopu.day23_rxjava.model;
import java.util.List;
public class News {
private boolean success;
private String title;
private String subtitle;
private String update_time;
private List data;
public void setSuccess(boolean success) {
this.success = success;
}
public boolean getSuccess() {
return success;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setSubtitle(String subtitle) {
this.subtitle = subtitle;
}
public String getSubtitle() {
return subtitle;
}
public String getUpdate_time() {
return update_time;
}
public void setUpdate_time(String update_time) {
this.update_time = update_time;
}
public void setData(List data) {
this.data = data;
}
public List getData() {
return data;
}
public class Data {
private int index;
private String title;
private String desc;
private String pic;
private String hot;
private String url;
private String mobilUrl;
public void setIndex(int index) {
this.index = index;
}
public int getIndex() {
return index;
}
public void setTitle(String title) {
this.title = title;
}
public String getTitle() {
return title;
}
public void setDesc(String desc) {
this.desc = desc;
}
public String getDesc() {
return desc;
}
public void setPic(String pic) {
this.pic = pic;
}
public String getPic() {
return pic;
}
public void setHot(String hot) {
this.hot = hot;
}
public String getHot() {
return hot;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrl() {
return url;
}
public void setMobilUrl(String mobilUrl) {
this.mobilUrl = mobilUrl;
}
public String getMobilUrl() {
return mobilUrl;
}
}
}
第七步:創(chuàng)建適配器
public class NewsAdapter extends RecyclerView.Adapter
List
public void setResource(List
this.list=list;
notifyDataSetChanged();
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.news_item,parent,false);
ViewHolder viewHolder=new ViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
News.Data data=list.get(position);
holder.news_title.setText(data.getTitle());
holder.news_desc.setText(data.getDesc());
Glide.with(holder.view).load(data.getPic()).into(holder.news_pic);
}
@Override
public int getItemCount() {
if (list==null){
return 0;
}else {
return list.size();
}
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView news_title,news_desc;
ImageView news_pic;
View view;
public ViewHolder(@NonNull View itemView) {
super(itemView);
view=itemView;
news_desc=itemView.findViewById(R.id.news_desc);
news_title=itemView.findViewById(R.id.news_title);
news_pic=itemView.findViewById(R.id.news_pic);
}
}
}
第八步:設(shè)置適配器
private RecyclerView rv_news;
NewsAdapter newsAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
rv_news=findViewById(R.id.rv_news);
newsAdapter=new NewsAdapter();
LinearLayoutManager layoutManager=new LinearLayoutManager(MainActivity2.this);
rv_news.setLayoutManager(layoutManager);
rv_news.setAdapter(newsAdapter);
retrofitGet();
}
第九步:進(jìn)行網(wǎng)絡(luò)請(qǐng)求
1. 創(chuàng)建請(qǐng)求接口
public interface News_Interface {
@GET("api/hotlist?type=baiduRD")
Observable
}
2. 開(kāi)始網(wǎng)絡(luò)請(qǐng)求
3. 處理返回結(jié)果
private void retrofitGet() {
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("https://api.vvhan.com/")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
News_Interface newsInterface=retrofit.create(News_Interface.class);
Observable
observable.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(News news) {
newsAdapter.setResource(news.getData());
}
@Override
public void onError(Throwable e) {
Log.i("onError","連接失敗");
}
@Override
public void onComplete() {
}
});
柚子快報(bào)邀請(qǐng)碼778899分享:android RxJava
精彩文章
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。