国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android Retrofit和Rxjava的網(wǎng)絡(luò)請求

2019-12-12 03:24:39
字體:
供稿:網(wǎng)友

Android  Retrofit和Rxjava的網(wǎng)絡(luò)請求

去年的時候好多公司就已經(jīng)使用Rxjava和Retrofit了,最近自自己學(xué)習(xí)了一下,感覺真的是很好用,讓自己的網(wǎng)絡(luò)請求變得更簡單了,而且封裝性極強。

首先做一下準備工作,導(dǎo)入需要引用的文件

compile 'com.android.support:appcompat-v7:25.1.0' testCompile 'junit:junit:4.12' compile 'io.reactivex:rxjava:1.1.0' compile 'io.reactivex:rxandroid:1.1.0' compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4' compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4' compile 'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4' compile 'com.google.code.gson:gson:2.6.2' compile 'com.jakewharton:butterknife:7.0.1' compile 'com.android.support:recyclerview-v7:25.1.0'

網(wǎng)絡(luò)請求的地址:https://api.douban.com/v2/movie/top250?start=0&count=10

添加網(wǎng)絡(luò)請求權(quán)限

<uses-permission android:name="android.permission.INTERNET"/>

首先看一下Retrofit的使用基本用法

創(chuàng)建一個接口類MovieService 對網(wǎng)絡(luò)接口進行請求這里寫代碼片

構(gòu)建網(wǎng)絡(luò)請求

public interface MovieService { @GET("top250") Call<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count);}
String baseUrl="https://api.douban.com/v2/movie/";  Retrofit retrofit = new Retrofit.Builder()    .baseUrl(baseUrl)    .addConverterFactory(GsonConverterFactory.create())    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())    .build();  MovieService service = retrofit.create(MovieService.class);  service.getTopMovie(0,10)    .subscribeOn(Schedulers.io())    .observeOn(AndroidSchedulers.mainThread())    .subscribe(new Subscriber<MovieBean>() {     @Override     public void onCompleted() {      Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show();     }     @Override     public void onError(Throwable e) {      resultTV.setText(e.getMessage());     }     @Override     public void onNext(MovieBean movieBean) {      resultTV.setText(movieBean.getTitle());     }    });  Call<MovieBean> call = service.getTopMovie(0, 10);  call.enqueue(new Callback<MovieBean>() {   @Override   public void onResponse(Call<MovieBean> call, Response<MovieBean> response) {    MovieBean body = response.body();    resultTV.setText(response.body().getTitle());    System.out.println("成功"+response.body().getCount());   }   @Override   public void onFailure(Call<MovieBean> call, Throwable t) {    resultTV.setText(t.getMessage());   }  });

現(xiàn)在看看我們的布局文件MainActivity的xml

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/activity_main" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="ledon.com.retrofitdemo.MainActivity"> <Button  android:id="@+id/click_me_BN"  android:layout_width="match_parent"  android:layout_height="wrap_content"  android:layout_alignParentBottom="true"  android:padding="5dp"  android:text="獲取數(shù)據(jù)"  android:textSize="16sp"/> <ListView  android:id="@+id/result_TV"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:layout_above="@id/click_me_BN"  android:textSize="16sp"/></RelativeLayout>

接下來就看看怎么樣和RxJava的完美結(jié)合了。

首先改造一下MovieService這個接口

public interface MovieService { @GET("top250") Observable<MovieBean> getTopMovie(@Query("start")int start, @Query("count")int count);}

然后看一下我們需要創(chuàng)建一個HttpMethods關(guān)于一個http的請求方法

package ledon.com.retrofitdemo.api;import java.util.List;import java.util.concurrent.TimeUnit;import javax.security.auth.Subject;import ledon.com.retrofitdemo.MovieBean;import okhttp3.OkHttpClient;import retrofit2.Retrofit;import retrofit2.adapter.rxjava.RxJavaCallAdapterFactory;import retrofit2.converter.gson.GsonConverterFactory;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Func1;import rx.schedulers.Schedulers;/** * Created by Administrator on 2017/3/9. */public class HttpMethods { public static final String BASE_URL="https://api.douban.com/v2/movie/"; private static final int DEFAULT_TIMEOUT=5; private Retrofit retrofit; private MovieService movieService; //私有化構(gòu)造方法 private HttpMethods(){  //手動創(chuàng)建一個okhttpClient并設(shè)置超時時間  OkHttpClient.Builder builder = new OkHttpClient.Builder();  builder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);  retrofit=new Retrofit.Builder()    .client(builder.build())    .addConverterFactory(GsonConverterFactory.create())    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())    .baseUrl(BASE_URL)    .build();  movieService = retrofit.create(MovieService.class); } //在訪問httpmethods時候創(chuàng)建單例 private static class SingletonHolder{  private static final HttpMethods INSTANCE=new HttpMethods(); }  //獲取單例 public static HttpMethods getInstance(){  return SingletonHolder.INSTANCE; } public void getTopMovie(Subscriber<MovieBean>subscriber, int start, int count){  movieService.getTopMovie(start, count)    .subscribeOn(Schedulers.io())    .unsubscribeOn(Schedulers.io())    .observeOn(AndroidSchedulers.mainThread())    .subscribe(subscriber); }}

so,很簡單,我們的結(jié)合之路已經(jīng)完成,另附源代碼

package ledon.com.retrofitdemo;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.widget.Button;import android.widget.ListView;import android.widget.RelativeLayout;import android.widget.Toast;import java.util.List;import butterknife.Bind;import butterknife.ButterKnife;import butterknife.OnClick;import ledon.com.retrofitdemo.adapter.MovieAdapter;import ledon.com.retrofitdemo.api.HttpMethods;import rx.Subscriber;public class MainActivity extends AppCompatActivity { @Bind(R.id.click_me_BN) Button clickMeBN; @Bind(R.id.result_TV) ListView resultTV; @Bind(R.id.activity_main) RelativeLayout activityMain; private Subscriber<MovieBean> subscriber; private List<MovieBean.SubjectsBean> list; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);  ButterKnife.bind(this);  //resultTV.setAdapter(); } //進行網(wǎng)絡(luò)請求 private void getMovie() {  subscriber = new Subscriber<MovieBean>() {   @Override   public void onCompleted() {    Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show();   }   @Override   public void onError(Throwable e) {    //resultTV.setText(e.getMessage());   }   @Override   public void onNext(MovieBean movieBean) {    // List<MovieBean.SubjectsBean> subjects = movieBean.getSubjects();    list=movieBean.getSubjects();    MovieAdapter movieAdapter=new MovieAdapter(MainActivity.this,list);    resultTV.setAdapter(movieAdapter);    //resultTV.setText(movieBean.getTitle());   }  };  HttpMethods.getInstance().getTopMovie(subscriber, 0, 10);  /* String baseUrl="https://api.douban.com/v2/movie/";  Retrofit retrofit = new Retrofit.Builder()    .baseUrl(baseUrl)    .addConverterFactory(GsonConverterFactory.create())    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())    .build();  MovieService service = retrofit.create(MovieService.class);  service.getTopMovie(0,10)    .subscribeOn(Schedulers.io())    .observeOn(AndroidSchedulers.mainThread())    .subscribe(new Subscriber<MovieBean>() {     @Override     public void onCompleted() {      Toast.makeText(MainActivity.this, "Get Top Movie Completed", Toast.LENGTH_SHORT).show();     }     @Override     public void onError(Throwable e) {      resultTV.setText(e.getMessage());     }     @Override     public void onNext(MovieBean movieBean) {      resultTV.setText(movieBean.getTitle());     }    });*/  //Call<MovieBean> call = service.getTopMovie(0, 10);  /* call.enqueue(new Callback<MovieBean>() {   @Override   public void onResponse(Call<MovieBean> call, Response<MovieBean> response) {    MovieBean body = response.body();    resultTV.setText(response.body().getTitle());    System.out.println("成功"+response.body().getCount());   }   @Override   public void onFailure(Call<MovieBean> call, Throwable t) {    resultTV.setText(t.getMessage());   }  });*/ } @OnClick(R.id.click_me_BN) public void onClick() {  getMovie(); }}
package ledon.com.retrofitdemo;import java.util.List;/** * Created by Administrator on 2017/3/9. */public class MovieBean { /**  * count : 10  * start : 0  * total : 250  * subjects : [{"rating":{"max":10,"average":9.6,"stars":"50","min":0},"genres":["犯罪","劇情"],"title":"肖申克的救贖","casts":[{"alt":"https://movie.douban.com/celebrity/1054521/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/17525.jpg","large":"https://img3.doubanio.com/img/celebrity/large/17525.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/17525.jpg"},"name":"蒂姆?羅賓斯","id":"1054521"},{"alt":"https://movie.douban.com/celebrity/1054534/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/34642.jpg","large":"https://img3.doubanio.com/img/celebrity/large/34642.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/34642.jpg"},"name":"摩根?弗里曼","id":"1054534"},{"alt":"https://movie.douban.com/celebrity/1041179/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/5837.jpg","large":"https://img1.doubanio.com/img/celebrity/large/5837.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/5837.jpg"},"name":"鮑勃?岡頓","id":"1041179"}],"collect_count":1036030,"original_title":"The Shawshank Redemption","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1047973/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/230.jpg","large":"https://img3.doubanio.com/img/celebrity/large/230.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/230.jpg"},"name":"弗蘭克?德拉邦特","id":"1047973"}],"year":"1994","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p480747492.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p480747492.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p480747492.jpg"},"alt":"https://movie.douban.com/subject/1292052/","id":"1292052"},{"rating":{"max":10,"average":9.4,"stars":"50","min":0},"genres":["劇情","動作","犯罪"],"title":"這個殺手不太冷","casts":[{"alt":"https://movie.douban.com/celebrity/1025182/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/8833.jpg","large":"https://img3.doubanio.com/img/celebrity/large/8833.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/8833.jpg"},"name":"讓?雷諾","id":"1025182"},{"alt":"https://movie.douban.com/celebrity/1054454/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/2274.jpg","large":"https://img3.doubanio.com/img/celebrity/large/2274.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/2274.jpg"},"name":"娜塔莉?波特曼","id":"1054454"},{"alt":"https://movie.douban.com/celebrity/1010507/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/104.jpg","large":"https://img3.doubanio.com/img/celebrity/large/104.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/104.jpg"},"name":"加里?奧德曼","id":"1010507"}],"collect_count":1002125,"original_title":"Léon","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1031876/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/33301.jpg","large":"https://img3.doubanio.com/img/celebrity/large/33301.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/33301.jpg"},"name":"呂克?貝松","id":"1031876"}],"year":"1994","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p511118051.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p511118051.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p511118051.jpg"},"alt":"https://movie.douban.com/subject/1295644/","id":"1295644"},{"rating":{"max":10,"average":9.5,"stars":"50","min":0},"genres":["劇情","愛情","同性"],"title":"霸王別姬","casts":[{"alt":"https://movie.douban.com/celebrity/1003494/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/67.jpg","large":"https://img1.doubanio.com/img/celebrity/large/67.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/67.jpg"},"name":"張國榮","id":"1003494"},{"alt":"https://movie.douban.com/celebrity/1050265/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/10381.jpg","large":"https://img3.doubanio.com/img/celebrity/large/10381.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/10381.jpg"},"name":"張豐毅","id":"1050265"},{"alt":"https://movie.douban.com/celebrity/1035641/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/1399268395.47.jpg","large":"https://img1.doubanio.com/img/celebrity/large/1399268395.47.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/1399268395.47.jpg"},"name":"鞏俐","id":"1035641"}],"collect_count":727900,"original_title":"霸王別姬","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1023040/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/750.jpg","large":"https://img3.doubanio.com/img/celebrity/large/750.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/750.jpg"},"name":"陳凱歌","id":"1023040"}],"year":"1993","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p1910813120.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p1910813120.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p1910813120.jpg"},"alt":"https://movie.douban.com/subject/1291546/","id":"1291546"},{"rating":{"max":10,"average":9.4,"stars":"50","min":0},"genres":["劇情","愛情"],"title":"阿甘正傳","casts":[{"alt":"https://movie.douban.com/celebrity/1054450/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/551.jpg","large":"https://img3.doubanio.com/img/celebrity/large/551.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/551.jpg"},"name":"湯姆?漢克斯","id":"1054450"},{"alt":"https://movie.douban.com/celebrity/1002676/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/51737.jpg","large":"https://img1.doubanio.com/img/celebrity/large/51737.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/51737.jpg"},"name":"羅賓?懷特","id":"1002676"},{"alt":"https://movie.douban.com/celebrity/1031848/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/1345.jpg","large":"https://img3.doubanio.com/img/celebrity/large/1345.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/1345.jpg"},"name":"加里?西尼斯","id":"1031848"}],"collect_count":895393,"original_title":"Forrest Gump","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1053564/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/505.jpg","large":"https://img3.doubanio.com/img/celebrity/large/505.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/505.jpg"},"name":"羅伯特?澤米吉斯","id":"1053564"}],"year":"1994","images":{"small":"https://img1.doubanio.com/view/movie_poster_cover/ipst/public/p510876377.jpg","large":"https://img1.doubanio.com/view/movie_poster_cover/lpst/public/p510876377.jpg","medium":"https://img1.doubanio.com/view/movie_poster_cover/spst/public/p510876377.jpg"},"alt":"https://movie.douban.com/subject/1292720/","id":"1292720"},{"rating":{"max":10,"average":9.5,"stars":"50","min":0},"genres":["劇情","喜劇","愛情"],"title":"美麗人生","casts":[{"alt":"https://movie.douban.com/celebrity/1041004/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/26764.jpg","large":"https://img3.doubanio.com/img/celebrity/large/26764.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/26764.jpg"},"name":"羅伯托?貝尼尼","id":"1041004"},{"alt":"https://movie.douban.com/celebrity/1000375/","avatars":{"small":"https://img1.doubanio.com/img/celebrity/small/9548.jpg","large":"https://img1.doubanio.com/img/celebrity/large/9548.jpg","medium":"https://img1.doubanio.com/img/celebrity/medium/9548.jpg"},"name":"尼可萊塔?布拉斯基","id":"1000375"},{"alt":"https://movie.douban.com/celebrity/1000368/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/45590.jpg","large":"https://img3.doubanio.com/img/celebrity/large/45590.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/45590.jpg"},"name":"喬治?坎塔里尼","id":"1000368"}],"collect_count":493063,"original_title":"La vita è bella","subtype":"movie","directors":[{"alt":"https://movie.douban.com/celebrity/1041004/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/26764.jpg","large":"https://img3.doubanio.com/img/celebrity/large/26764.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/26764.jpg"},"name":"羅伯托?貝尼尼","id":"1041004"}],"year":"1997","images":{"small":"https://img3.doubanio.com/view/movie_poster_cover/ipst/public/p510861873.jpg","large":"https://img3.doubanio.com/view/movie_poster_cover/lpst/public/p510861873.jpg","medium":"https://img3.doubanio.com/view/movie_poster_cover/spst/public/p510861873.jpg"},"alt":"https://movie.douban.com/subject/1292063/","id":"1292063"},{"rating":{"max":10,"average":9.2,"stars":"50","min":0},"genres":["劇情","動畫","奇幻"],"title":"千與千尋","casts":[{"alt":"https://movie.douban.com/celebrity/1023337/","avatars":{"small":"https://img3.doubanio.com/img/celebrity/small/1463193210.13.jpg","large":"https://img3.doubanio.com/img/celebrity/large/1463193210.13.jpg","medium":"https://img3.doubanio.com/img/celebrity/medium/1463193210.13.jpg"},"name":"

主站蜘蛛池模板:
长葛市|
武冈市|
屯门区|
阿克陶县|
泰州市|
措勤县|
达尔|
昌黎县|
呼图壁县|
绥化市|
友谊县|
临海市|
紫阳县|
万宁市|
寻乌县|
河南省|
崇义县|
达州市|
廊坊市|
铜鼓县|
阳春市|
顺平县|
长兴县|
金华市|
铁力市|
临安市|
江山市|
丽江市|
久治县|
福贡县|
廉江市|
巩义市|
铁岭县|
香河县|
辉县市|
卓尼县|
金平|
阿图什市|
密山市|
道真|
额尔古纳市|