Retrofit+Rxjava2+Mvp+Xrecyclerview請求數據

1.依賴
implementation ‘io.reactivex.rxjava2:rxjava:2.0.7’
implementation ‘io.reactivex.rxjava2:rxandroid:2.0.1’
implementation ‘com.squareup.retrofit2:retrofit:2.1.0’
implementation ‘com.squareup.retrofit2:adapter-rxjava2:2.2.0’
implementation ‘com.squareup.retrofit2:converter-gson:2.1.0’

Xrecyclerview依賴
  implementation 'com.jcodecraeer:xrecyclerview:1.3.2'

2.接口
APIKEY=‘71e58b5b2f930eaf1f937407acde08fe
http://api.tianapi.com/nba/?key=APIKEY&num=10

3.httputil
public interface HttpUrluril {
String BASE_URL=“http://api.tianapi.com/”;
String ER_URL=“nba/”;
}

4.RetrofitUtil
public class RetrofitUtil {
private static RetrofitUtil instance;
private Retrofit mRetrofit;
private OkHttpClient okHttpClient = new OkHttpClient();
public static RetrofitUtil getInstance(){
if (instance==null){
instance = new RetrofitUtil();
}
return instance;
}
private RetrofitUtil(){
mRetrofit = new Retrofit.Builder()
.baseUrl(HttpUrluril.BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.client(okHttpClient)
.build();
}
public T createApi(Class cls){
T t = mRetrofit.create(cls);
return t;
}
}

5.Apiservice
public interface ApiService {
@GET(HttpUrluril.ER_URL)
Observable getBeanen(@Query(“key”) String key, @Query(“num”) int num);
}

6.DataCallBack
public interface DataCallBack {
void Onsuccess(JsonBean jsonBean);
void OnFailer(String error);
}

7.view
public interface DataView {
void Onsuccess(JsonBean jsonBean);
void OnFailer(String error);
}

8.model
public class DataModel {
public void show(String url, int num, final DataCallBack dataCallBack){
ApiService apiService = RetrofitUtil.getInstance().createApi(ApiService.class);
apiService.getBeanen(“71e58b5b2f930eaf1f937407acde08fe”,num)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer() {
@Override
public void onSubscribe(Disposable d) {

                }
                @Override
                public void onNext(JsonBean listJsonBean) {
                    dataCallBack.Onsuccess(listJsonBean);
                }
                @Override
                public void onError(Throwable e) {
                    dataCallBack.OnFailer("失敗");
                }
                @Override
                public void onComplete() {

                }
            });
}

}

9.Presenter
public class DataPresenter {
private DataView dataView;
private DataModel dataModel;

public DataPresenter(DataView dataView) {
    this.dataView = dataView;
    dataModel = new DataModel();
}
public void show(String url,int num){
    dataModel.show(url, num, new DataCallBack() {
        @Override
        public void Onsuccess(JsonBean listJsonBean) {
            dataView.Onsuccess(listJsonBean);
        }

        @Override
        public void OnFailer(String error) {
            dataView.OnFailer(error);
        }
    });
}

}

10.Adapter
public class XAdapter extends XRecyclerView.Adapter {
private Context context;
private JsonBean jsonBean;

public XAdapter(Context context, JsonBean listJsonBean) {
    this.context = context;
    this.jsonBean = listJsonBean;
}

public XAdapter(Context context) {
    this.context = context;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View inflate = LayoutInflater.from(context).inflate(R.layout.item, parent, false);
    RecyclerView.ViewHolder viewHolder=null;
    viewHolder = new Holder(inflate);
    return viewHolder;
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    ((Holder)holder).textView.setText(jsonBean.getNewslist().get(position).getTitle());
    Uri uri=Uri.parse("https://pic.baike.soso.com/ugc/baikepic2/3233/20170730123721-334049994.jpg/0");
    Picasso.with(context).load(uri).into(((Holder)holder).imageView);
}

@Override
public int getItemCount() {
    return jsonBean.getNewslist().size();
}
private class Holder extends XRecyclerView.ViewHolder{

    private final ImageView imageView;
    private final TextView textView;

    public Holder(View itemView) {
        super(itemView);
        imageView = itemView.findViewById(R.id.image_item);
        textView = itemView.findViewById(R.id.tv);
    }
}

}

11.Activity
public class MainActivity extends AppCompatActivity implements DataView {
private DataPresenter dataPresenter;
private XRecyclerView xrec;
private String api = “http://api.tianapi.com/”;
private int num=10;
private XAdapter xAdapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initView();
    dataPresenter = new DataPresenter(this);
    getBean();
}

private void getBean() {
    dataPresenter.show(api,num);
}

private void initView() {
    xrec = (XRecyclerView) findViewById(R.id.xrec);
    xrec.setLoadingMoreEnabled(true);
    xrec.setPullRefreshEnabled(true);
    xrec.setLoadingListener(new XRecyclerView.LoadingListener() {
        @Override
        public void onRefresh() {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    num=10;
                    getBean();
                    xrec.refreshComplete();
                    //xAdapter.notifyDataSetChanged();
                }
            },2000);

        }

        @Override
        public void onLoadMore() {
            new Handler().postDelayed(new Runnable() {
                @Override
                public void run() {
                    num+=10;
                    getBean();
                    xrec.loadMoreComplete();
                    //xAdapter.notifyDataSetChanged();
                }
            },2000);

        }
    });
}

@Override
public void Onsuccess(JsonBean listJsonBean) {
    LinearLayoutManager linearLayoutManager = new LinearLayoutManager(MainActivity.this,LinearLayoutManager.VERTICAL,false);
    xrec.setLayoutManager(linearLayoutManager);
    xAdapter = new XAdapter(MainActivity.this,listJsonBean);
    xrec.setAdapter(xAdapter);
}

@Override
public void OnFailer(String error) {

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章