最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Rxjava+Retrofit+Okhttp進(jìn)行網(wǎng)絡(luò)訪問及數(shù)據(jù)解析

 更新時(shí)間:2022年08月24日 08:59:03   作者:好男人中國造???????  
這篇文章主要介紹了Rxjava+Retrofit+Okhttp進(jìn)行網(wǎng)絡(luò)訪問及數(shù)據(jù)解析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下

前言:

在平時(shí)項(xiàng)目開發(fā)中Okhttp3.x、Rxjava2.x、Retrofit2.x,使用的越來越多了,需要我們不斷的去學(xué)習(xí)別人的優(yōu)秀開發(fā)設(shè)計(jì)程序,今天簡單的了解下

1,創(chuàng)建Android項(xiàng)目(Android studio)導(dǎo)入相關(guān)依賴

    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.squareup.retrofit2:retrofit:2.4.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.5'
    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

這里有網(wǎng)友提供的免費(fèi)測試接口 http://gank.io/api/data/Android/10/1

2,定義接口類

package app.bxvip.com.rxjavaretrofit.imple;

import okhttp3.ResponseBody;
import retrofit2.Call;
import retrofit2.http.GET;
public interface MyApi {
  @GET("api/data/Android/10/1")
  Call<ResponseBody> getAndroidInfo();
    /**
     * 這里使用到了 Okhttp3 和retrofit2,我們通過導(dǎo)入的包就知道
     * 估計(jì)會有人對上面的寫法表示不理解,接下來我們慢慢理解:
     * @GET 這個表示的是GET請求,想必不用不多說
     * "api/data/Android/10/1"可以理解為接口url, 一般url分為兩個部分,前面一部分是不會變化的,就像前面提到的http://gank.io/api/data/Android/10/1這個接口
     * http://gank.io/這個是不會改變的,俗稱baseurl,后面的就是接口url部分
     * Call<ResponseBody>是retrofit2中的對象,等會我們就知道他的用處
     */
}

3,發(fā)出請求,回調(diào)信息

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button bt_send;
    private TextView tv_result;
    public Retrofit retrofit;
    public  MyApi api;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bt_send =findViewById(R.id.bt_send);
        tv_result =findViewById(R.id.result);
        bt_send.setOnClickListener(this);
        //實(shí)例化相關(guān)對象
        initObject();
    }

    private void initObject() {
    	//這里是構(gòu)建對象,將之前的接口url和baseurl拼接
        retrofit = new Retrofit.Builder().baseUrl("http://gank.io/").build();
        api = retrofit.create(MyApi.class);
        
    }

    @Override
    public void onClick(View view) {
        switch (view.getId()){
            case R.id.bt_send:
                send();
                break;
            default:
                break;
        }
    }

    private void send() {
    //發(fā)出請求,并接受回調(diào)信息
        Call<ResponseBody> call = api.getAndroidInfo();
        call.enqueue(new Callback<ResponseBody>() {
            @Override
            public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                Log.i("request return :","success");
                tv_result.setText(response.body().toString());
            }

            @Override
            public void onFailure(Call<ResponseBody> call, Throwable t) {
                Log.i("request return :","faild");
                tv_result.setText(t.getMessage());
            }
        });
    }
}

注意需要添加網(wǎng)絡(luò)權(quán)限

 但是這樣的話,看起來是不是結(jié)果太亂了,只知道返回了數(shù)據(jù),亂七八糟的什么也看不出來,有沒有辦法讓數(shù)據(jù)更工整點(diǎn)呢,GSON是一個神器

4,Rxjava 和 Retrofit的結(jié)合

//這里提供兩個接口一個是天氣接口,一個是豆瓣的接口
https://www.sojson.com/open/api/weather/json.shtml?city=廣州
https://api.douban.com/v2/book/search?q=金瓶梅

1,通過GsonFormat插件創(chuàng)建兩個對象WeatherBean和BookBean 

 2,編寫訪問的接口程序

	//接著上面的 MyApi后面繼續(xù)寫,這里是訪問程序接口
    @GET("open/api/weater/json.shtml")
    Observable<WeatherBean> getWeather(@Query("city")String city);
	//@Query("city")String city是需要傳遞的參數(shù)用問好隔開
    @GET("book/search")
    Observable<BookBean> getBook(@Query("a")String name);

3,通過訂閱連接觀察者和被觀察者

// Retrofit 通過okhttp訪問接口
  Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://t.weather.sojson.com/api/weather/city/")
                .client(getOkHttpClient())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        api = retrofit.create(MyApi.class);
 public OkHttpClient getOkHttpClient() {
        if (okHttpClient==null){
            okHttpClient = new OkHttpClient.Builder()
                    .retryOnConnectionFailure(true)
                    .connectTimeout(3000, TimeUnit.SECONDS)
                    .addInterceptor(new Interceptor() {
                        @Override
                        public okhttp3.Response intercept(Chain chain) throws IOException {
                            Request request = chain.request()
                                    .newBuilder()
                                    //刪除原始的請求頭
                                    .removeHeader("User-Agent")
                                    //添加新的 User-Agent
                                    .addHeader("User-Agent","Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:0.9.4)")
                                    .build();
                            return chain.proceed(request);
                        }
                    })
                    .build();

        }
        return okHttpClient;
    }
GsonConverterFactory
RxJava2CallAdapterFactory
//需要導(dǎo)入兩個依賴
    implementation 'com.squareup.retrofit2:converter-gson:2.4.0'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:2.4.0'

4,通過Rxjava將訪問到的結(jié)果發(fā)射出來

 private void sendWeather(){
        //返回的是一個Obserable對象
        api.getWeather("廣州").subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<WeatherBean>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(WeatherBean weatherBean) {
                        Log.i("hb","ad"+weatherBean.getCity());
                        if (weatherBean==null){
                            Log.i("hb",weatherBean.getCity());
                        }
                        //這里我們可以使用回調(diào)的方式,發(fā)給其他的類
                        //如 listern.send(weatherBean)
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("hb",e.getMessage());
                    }

                    @Override
                    public void onComplete() {
                        Log.i("hb","sdf");
                    }
                });
    }

到此這篇關(guān)于Rxjava+Retrofit+Okhttp進(jìn)行網(wǎng)絡(luò)訪問及數(shù)據(jù)解析的文章就介紹到這了,更多相關(guān)Rxjava網(wǎng)絡(luò)訪問內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Android編程實(shí)現(xiàn)改變控件背景及形態(tài)的方法

    Android編程實(shí)現(xiàn)改變控件背景及形態(tài)的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)改變控件背景及形態(tài)的方法,涉及Android控件布局設(shè)置的相關(guān)技巧,需要的朋友可以參考下
    2016-02-02
  • Android DigitalClock組件用法實(shí)例

    Android DigitalClock組件用法實(shí)例

    這篇文章主要介紹了Android DigitalClock組件用法,結(jié)合實(shí)例形式分析了DigitalClock組件的布局調(diào)用技巧,非常簡單實(shí)用,需要的朋友可以參考下
    2016-01-01
  • Android自定義簡單的頂部標(biāo)題欄

    Android自定義簡單的頂部標(biāo)題欄

    這篇文章主要為大家詳細(xì)介紹了Android自定義簡單的頂部標(biāo)題欄,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • Android仿京東分類模塊左側(cè)分類條目效果

    Android仿京東分類模塊左側(cè)分類條目效果

    這篇文章主要為大家詳細(xì)介紹了Android仿京東分類模塊左側(cè)分類條目效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • Kotlin引用其他xml的view對象過程詳解

    Kotlin引用其他xml的view對象過程詳解

    這篇文章主要介紹了Kotlin中如何引用其他xml中的view對象,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-02-02
  • 解決java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper問題

    解決java.lang.NoClassDefFoundError: android.support.v4.animati

    這篇文章主要介紹了解決Android Studio出現(xiàn)java.lang.NoClassDefFoundError: android.support.v4.animation.AnimatorCompatHelper的問題,感興趣的朋友一起看看吧
    2021-08-08
  • Android支付寶支付設(shè)計(jì)開發(fā)

    Android支付寶支付設(shè)計(jì)開發(fā)

    這篇文章主要為大家詳細(xì)介紹了Android支付寶支付設(shè)計(jì)開發(fā),設(shè)計(jì)支付寶支付開發(fā)方案,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Android開發(fā)中匿名設(shè)備標(biāo)識符OAID使用及初始化

    Android開發(fā)中匿名設(shè)備標(biāo)識符OAID使用及初始化

    這篇文章主要為大家介紹了Android開發(fā)中匿名設(shè)備標(biāo)識符OAID使用及初始化,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-04-04
  • Android?Studio實(shí)現(xiàn)智能聊天

    Android?Studio實(shí)現(xiàn)智能聊天

    這篇文章主要為大家詳細(xì)介紹了Android?Studio實(shí)現(xiàn)智能聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • Android編程之語音識別實(shí)現(xiàn)方法

    Android編程之語音識別實(shí)現(xiàn)方法

    這篇文章主要介紹了Android編程語音識別實(shí)現(xiàn)方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Android語音識別的操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2016-10-10

最新評論

城口县| 双江| 水富县| 兴国县| 南开区| 承德县| 鹤壁市| 金沙县| 昌黎县| 鄱阳县| 河源市| 内江市| 卫辉市| 五大连池市| 东丽区| 桐乡市| 望都县| 万荣县| 和田市| 绥德县| 玉溪市| 锡林浩特市| 吉林市| 佳木斯市| 卓资县| 朝阳县| 承德县| 峨眉山市| 吴川市| 泗水县| 屯门区| 德阳市| 临海市| 云霄县| 唐山市| 略阳县| 安阳县| 宕昌县| 寻乌县| 镇巴县| 繁峙县|