Retrofit+Rxjava简单的请求网络数据

依赖:

compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'


工具类:


package com.example.admin.retrofit_rxjava_mvp.Entity.Utils;

import com.example.admin.retrofit_rxjava_mvp.Entity.Contants;
import com.example.admin.retrofit_rxjava_mvp.service.Apiservice;

import java.util.ArrayList;
import java.util.List;

import okhttp3.OkHttpClient;
import retrofit2.CallAdapter;
import retrofit2.Converter;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

/**
 * Created by admin on 2018/1/30.
 * 构造者模式如何封装:首先有各种builder过程,最后通过build()方法对对象进行创建
 * 构造者模式:把一个复杂的对象逐步构造出来的过程
 */

public class RetrofitUtils {

    private static RetrofitUtils mInstance;
    private static Apiservice apiservice;

    /**
     * 声明私有构造方法,类似于单利模式,让调用者无法new出对象,只能通过构造者模式创建对象
     */
    private RetrofitUtils(){


    }

    /**
     * 先后调用的过程,只有对象给build成功之后,才能调用apiservice,这也是retrofit的几个先后的步骤
     * @return
     */
    public Apiservice getApiservice(){
        return apiservice;
    }

    public static class Builder{

        private List<CallAdapter.Factory> callAdapterFactory = new ArrayList<>();
        private List<Converter.Factory> convertFactorys = new ArrayList<>();
        private OkHttpClient okHttpClient;

        public Builder addCallAdapterFactory(CallAdapter.Factory factory){
            callAdapterFactory.add(factory);
            return this;
        }

        public Builder addConverterFactory(Converter.Factory factory){
            convertFactorys.add(factory);
            return this;
        }

        public Builder client(OkHttpClient okHttpClient){
            this.okHttpClient =okHttpClient;
            return this;
        }


        /**
         * build方法才是真正的业务逻辑操作,才是真正构建对象的过程
         * @return
         */

        public RetrofitUtils build(){

            Retrofit.Builder builder = new Retrofit.Builder();

            if (convertFactorys != null&&convertFactorys.size()==0) {
                //如果集合中没有对象,我们添加默认的gson解析器
                builder.addConverterFactory(GsonConverterFactory.create());
            }
            for (Converter.Factory convertFactory : convertFactorys) {
                builder.addConverterFactory(convertFactory);
            }

            if (callAdapterFactory != null&&callAdapterFactory.size()==0) {
               builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create());
            }
            for (CallAdapter.Factory factory : callAdapterFactory) {
                builder.addCallAdapterFactory(factory);
            }

            //第一步:创建Retrofit
            Retrofit retrofit = builder.client(okHttpClient).baseUrl(Contants.BASE_URL)
                    .build();

            //第二步:创建apiservice接口类
             apiservice = retrofit.create(Apiservice.class);

            //第三步:请求网络(供外部调用者调用)
             mInstance = new RetrofitUtils();


            return mInstance;

        }




    }



}


拦截器:


package com.example.admin.retrofit_rxjava_mvp.Entity.Utils;

import java.io.IOException;

import okhttp3.Interceptor;
import okhttp3.Response;

/**
 * Created by admin on 2018/1/30.
 * //拦截器
 */

public class MyInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        return null;
    }
}


接口类:

package com.example.admin.retrofit_rxjava_mvp.service;

import com.example.admin.retrofit_rxjava_mvp.Entity.BaseResponseEntity;
import com.example.admin.retrofit_rxjava_mvp.Entity.ProductEntity;
import com.example.admin.retrofit_rxjava_mvp.Entity.User;

import java.util.List;
import java.util.Map;

import io.reactivex.Observable;
import retrofit2.Call;
import retrofit2.http.FormUrlEncoded;
import retrofit2.http.GET;
import retrofit2.http.POST;
import retrofit2.http.Query;
import retrofit2.http.QueryMap;

/**
 * Created by admin on 2018/1/30.
 *  Description:retrofit接口方法,先从广度分包,再从深度细化功能类
 * 实际在面试过程中,也是先从广度说起,再从深度挖掘,如果你刚开始就从深度挖掘,那么很容易挖的太深,给自己挖坑
 */

public interface Apiservice {//接口类,只声明方法,不进行实现

    //post用queryMap  get用query
    @POST("user/login")
    @FormUrlEncoded
    Observable<BaseResponseEntity<User>> login(@QueryMap Map<String,String> params);


    //请求商品信息
    @GET("product/getProducts")
    Observable<BaseResponseEntity<List<ProductEntity>>> getProuduts(@Query("pscid") String pscid);
}


Entity类:

package com.example.admin.retrofit_rxjava_mvp.Entity;

/**
 * Created by admin on 2018/1/30.
 */

public class BaseResponseEntity<T> {
    public String code;//状态码
    public String msg;//反馈回来的信息
    public T data;
}

商品信息类(data):

package com.example.admin.retrofit_rxjava_mvp.Entity;

/**
 * Created by admin on 2018/1/30.
 * 商品信息类
 */

public class ProductEntity extends BaseResponseEntity {

    public String title;
    public String subhead;
    public String itemtype;
    public String bargainPrice;
    public String price;


    //有参构造
    public ProductEntity(String title, String subhead, String itemtype, String bargainPrice, String price) {
        this.title = title;
        this.subhead = subhead;
        this.itemtype = itemtype;
        this.bargainPrice = bargainPrice;
        this.price = price;
    }

    public String getTitle() {
        return title;
    }

    public String getSubhead() {
        return subhead;
    }

    public String getItemtype() {
        return itemtype;
    }

    public String getBargainPrice() {
        return bargainPrice;
    }

    public String getPrice() {
        return price;
    }
}

获取网址的链接:

package com.example.admin.retrofit_rxjava_mvp.Entity;

/**
 * Created by admin on 2018/1/30.
 */

public class Contants {
    //retrofit根路径//数据接口
    public static final String BASE_URL="https://www.zhaoapi.cn/";
}

实现类(Maintivity):


package com.example.admin.retrofit_rxjava_mvp.View;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

import com.example.admin.retrofit_rxjava_mvp.Entity.BaseResponseEntity;
import com.example.admin.retrofit_rxjava_mvp.Entity.ProductEntity;
import com.example.admin.retrofit_rxjava_mvp.R;
import com.example.admin.retrofit_rxjava_mvp.Utils.RetrofitUtils;

import java.util.List;

import io.reactivex.Observer;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.disposables.Disposable;
import io.reactivex.schedulers.Schedulers;
import okhttp3.OkHttpClient;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class Main2Activity extends AppCompatActivity {

    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main2);

        initview();

        getData();
    }

    //初始化控件
    private void initview() {
        textView = (TextView) findViewById(R.id.title_tv);
    }


    //通过retrofit封装类,调用数据
    public void getData() {

        OkHttpClient okHttpClient = new OkHttpClient.Builder().build();


        new RetrofitUtils.Builder()
                .client(okHttpClient)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create())
                .build().getApiservice()
                .getProuduts("1")
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<BaseResponseEntity<List<ProductEntity>>>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(BaseResponseEntity<List<ProductEntity>> value) {
                        System.out.println("数据:"+value.data.size());
                        //遍历出数据赋值给控件
                        for (ProductEntity productEntity : value.data) {
                            String title = productEntity.getTitle();
                            textView.setText(title);
                        }


                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onComplete() {

                    }
                });

    }
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值