依赖:
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() {
}
});
}
}