rxjava+retrofit簡單demo

rxjava+retrofit簡單入門demo

這裏寫圖片描述

這裏寫圖片描述

1、rxjava的三個行爲

這裏寫圖片描述

1、觀察者

Subscriber

2、被觀察者

Observable

3、訂閱關係

observable.subscribe(subscriber)

2、rxjava示例

請求api

http://api.map.baidu.com/telematics/v3/movie?qt=hot_movie&location=北京&output=json&ak=A72e372de05e63c8740b2622d0ed8ab1

代碼如下:
1、ApiService代碼

public interface ApiService {
    /**
     * 請求示例:
     * http://api.map.baidu.com/telematics/v3/movie?qt=hot_movie&location=北京&output=json&ak=A72e372de05e63c8740b2622d0ed8ab1
     * @param query
     * @param location
     * @param output
     * @param ak
     * @return
     */
    @GET("/telematics/v3/movie/{qt}/{location}/{output}/{ak}")
    Observable<Movie> getMovies(@Query("qt") String query,
                                             @Query("location") String location,
                                             @Query("output") String output,
                                             @Query("ak") String ak);

}

2、NetWork請求代碼

public class NetWrok {
    private static OkHttpClient okHttpClient = new OkHttpClient();
    private static Converter.Factory gsonConverterFactory = GsonConverterFactory.create();
    private static retrofit2.CallAdapter.Factory rxJavaCallAdapterFactory = RxJavaCallAdapterFactory.create();

    public static ApiService apiService;
    public static ApiService getMovieApi() {
        if (apiService == null) {
            Retrofit retrofit = new Retrofit.Builder()
                    .client(okHttpClient)
                    .baseUrl("http://api.map.baidu.com/")
                    .addConverterFactory(gsonConverterFactory)
                    .addCallAdapterFactory(rxJavaCallAdapterFactory)
                    .build();
            apiService = retrofit.create(ApiService.class);
        }
        return apiService;
    }
}

3、調用代碼

package com.example.administrator.myrxjava;

import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import java.util.ArrayList;

import adapter.FunAdapter;
import bean.Movie;
import network.NetWrok;
import rx.Observer;
import rx.Subscription;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;

public class MainActivity extends AppCompatActivity {
    private RecyclerView recyclerview;
    private SwipeRefreshLayout swiperefresh;
    private Button button;
    private FunAdapter adapter;
    private ArrayList<Movie.Movies> list;

    protected Subscription subscription;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerview= (RecyclerView) findViewById(R.id.recyclerview);
        LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this);
        linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL);
        recyclerview.setLayoutManager(linearLayoutManager);
        swiperefresh= (SwipeRefreshLayout) findViewById(R.id.swiperefresh);
        button= (Button) findViewById(R.id.button);
        list=new ArrayList<Movie.Movies>();
        adapter=new FunAdapter(MainActivity.this,list);
        recyclerview.setAdapter(adapter);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                swiperefresh.setRefreshing(true);
                initDate();
            }
        });
    }
    private void initDate() {
        subscription = NetWrok.getMovieApi()
                .getMovies("hot_movie","北京","json","A72e372de05e63c8740b2622d0ed8ab1")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(observer);
    }
    Observer<Movie> observer = new Observer<Movie>() {
        @Override
        public void onCompleted() {
            swiperefresh.setRefreshing(false);
            Log.i("--rxjava--","onCompleted");
        }
        @Override
        public void onError(Throwable e) {
            Log.i("--rxjava--e",e.toString());
        }
        @Override
        public void onNext(Movie images) {
            Log.i("--rxjava--onNext",images.getResult().getMovie().size()+"");
            adapter.setImages(images.getResult().getMovie());
        }
    };
}

代碼下載地址
http://download.csdn.net/detail/androidxiaogang/9741484

發佈了142 篇原創文章 · 獲贊 265 · 訪問量 23萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章