iT邦幫忙

2021 iThome 鐵人賽

DAY 10
0
Mobile Development

android studio 30天學習筆記系列 第 10

android studio 30天學習筆記-day 10-rxjava2+retrofit

前言

retrofit負責請求網路資料請求,rxjava負責異步執行、thread之間的切換,今天實作基本的rxjava2+retrofit使用方法

首先跟之前android studio 30天學習筆記-介紹retrofit(一)一樣

首先:

1.創造一個資料類別的class
2.使用@get方法獲取資料
public interface NextPart {
    @GET("todos")
    Observable<List<RetrofitSetting>> getCall(); //將原本的call改成Observable
    }
3.創建retrofit
public class MainActivity extends AppCompatActivity {
    private static final String TAG="Rxjava";
    private TextView tv1;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        tv1=findViewById(R.id.tv1);//顯示的字

        
Retrofit retrofit = new retrofit2.Retrofit.Builder()
                .addConverterFactory(GsonConverterFactory.create()) //Gson解析
                .baseUrl("https://jsonplaceholder.typicode.com")
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())//支援RxJava2
                .build();

        NextPart nextPart= retrofit.create(NextPart.class);

        Observable<List<RetrofitSetting>> observable=nextPart.getCall();
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<List<RetrofitSetting>>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG,"connect");
                    }

                    @Override
                    public void onNext(List<RetrofitSetting> retrofitSettings) {
                      for (RetrofitSetting retrofitSetting : retrofitSettings) { //retrofitSetting獲得retrofitSettings取回的資料
                            String content = " ";
                            content += "userId:" + retrofitSetting.getUserId() + "\n";
                            content += "id:" + retrofitSetting.getId() + "\n";
                            content += "title:" + retrofitSetting.getTitle() + "\n";
                            content += "completed:"+retrofitSetting.getCompleted() +"\n\n";
                            tv1.append(content);
                        } 
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.d(TAG, "fail");

                    }

                    @Override
                    public void onComplete() {
                        Log.d(TAG,"successful");

                    }
                });

subscribeOn:設定執行的內容要在哪一個thread執行
observeOn:設定處理回傳的內容在哪一個thread執行

各個thread:

Schedulers.io():IO操作的執行緒,常用於網路連線
Schedulers.computation():CPU計算密集的執行緒,用於處理複雜需要CPU計算的資料
Schedulers.newThread():創建新的Thread,一般不常用到
AndroidSchedulers.mainThread():Android主執行緒,用來更新UI


這樣就可以取到值了


上一篇
android studio 30天學習筆記-day 9-rxjava2補充
下一篇
android studio 30天學習筆記-day 11-介紹databinding(一)
系列文
android studio 30天學習筆記30

尚未有邦友留言

立即登入留言