这只是一个小Demo,仅供参考,步骤如下:
先将依赖导入,需要的依赖:
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
compile 'io.reactivex.rxjava2:rxjava:2.1.7'
compile 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
compile 'com.squareup.retrofit2:retrofit:2.0.0-beta4'
compile 'com.squareup.retrofit2:converter-gson:2.0.0-beta4'
compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
compile 'com.jakewharton:butterknife:7.0.0'
compile 'com.facebook.fresco:fresco:0.14.1'
简单的布一下局:
activity_main:
<?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:layout_width="match_parent"
android:layout_height="match_parent"
>
<android.support.v7.widget.RecyclerView
android:id="@+id/recycleview"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
item_layout:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"
>
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/simple"
fresco:roundAsCircle="true"
android:layout_width="120dp"
android:layout_height="120dp" />
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
接口:
APIKEY=‘71e58b5b2f930eaf1f937407acde08fe’
http://api.tianapi.com/nba/?key=APIKEY&num=10
主页面代码:
MainActivity:
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import com.bawei.guolei.guolei2017126.adapter.IAdapter;
import com.bawei.guolei.guolei2017126.presenter.MainPresenter;
import com.bawei.guolei.guolei2017126.view.MainView;
import butterknife.Bind;
import butterknife.ButterKnife;
public class MainActivity extends AppCompatActivity implements MainView{
@Bind(R.id.recycleview)
RecyclerView recycleview;
private MainPresenter presenter;
private IAdapter adapter;
private LinearLayoutManager manager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
presenter = new MainPresenter(this);
presenter.get();
adapter = new IAdapter(this);
manager = new LinearLayoutManager(this);
recycleview.setLayoutManager(manager);
recycleview.setAdapter(adapter);
}
@Override
public void success(Bean bean) {
adapter.addData(bean);
}
@Override
public void failure(Exception e) {
}
}
适配器:adapter
IAdapter:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.bawei.guolei.guolei2017126.Bean;
import com.bawei.guolei.guolei2017126.R;
import com.facebook.drawee.view.SimpleDraweeView;
import java.util.ArrayList;
import java.util.List;
import butterknife.Bind;
import butterknife.ButterKnife;
/**
* Created by Lenovo on 2017/12/6.
*/
public class IAdapter extends RecyclerView.Adapter<IAdapter.ViewHolder> {
private Context context;
private List<Bean.NewslistBean> list;
public IAdapter(Context context) {
this.context=context;
}
public void addData(Bean bean) {
if (list==null){
list = new ArrayList<>();
}
list.addAll(bean.getNewslist());
notifyDataSetChanged();
}
@Override
public IAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = View.inflate(context, R.layout.item_layout, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(IAdapter.ViewHolder holder, int position) {
holder.simple.setImageURI(list.get(position).getPicUrl());
holder.textView.setText(list.get(position).getTitle());
}
@Override
public int getItemCount() {
return list==null?0:list.size();
}
static class ViewHolder extends RecyclerView.ViewHolder{
@Bind(R.id.simple)
SimpleDraweeView simple;
@Bind(R.id.text_view)
TextView textView;
public ViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this,itemView);
}
}
}
数据引用接口:
IGetDataBase:
import io.reactivex.Observable;
import retrofit2.http.GET;
import retrofit2.http.Query;
/**
* Created by Lenovo on 2017/12/6.
*/
public interface IGetDataBase {
@GET("/nba")
Observable<Bean> get(@Query("key") String key, @Query("num") String num);
}
IApplication:
import android.app.Application;
import com.facebook.drawee.backends.pipeline.Fresco;
import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;
/**
* Created by Lenovo on 2017/12/6.
*/
public class IApplication extends Application {
public static IGetDataBase iGetDataBase;
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
Retrofit retrofit=new Retrofit.Builder()
.baseUrl("http://api.tianapi.com")
.addConverterFactory(GsonConverterFactory.create())
.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
.build();
iGetDataBase = retrofit.create(IGetDataBase.class);
}
}
MVP三层分类:
M层:MainModel:
import com.bawei.guolei.guolei2017126.Bean;
import com.bawei.guolei.guolei2017126.IApplication;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/**
* Created by Lenovo on 2017/12/6.
*/
public class MainModel {
public void getData(final ModelCallBack callBack){
IApplication.iGetDataBase.get("71e58b5b2f930eaf1f937407acde08fe","10")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<Bean>() {
@Override
public void accept(Bean bean) throws Exception {
callBack.success(bean);
}
});
}
}
M层接口:
ModelCallBack:
import com.bawei.guolei.guolei2017126.Bean;
/**
* Created by Lenovo on 2017/12/6.
*/
public interface ModelCallBack {
public void success(Bean bean);
public void failure(Exception e);
}
V层接口:
MainView:
import com.bawei.guolei.guolei2017126.Bean;
/**
* Created by Lenovo on 2017/12/6.
*/
public interface MainView {
public void success(Bean bean);
public void failure(Exception e);
}
P层:MainPresenter:
import com.bawei.guolei.guolei2017126.Bean;
import com.bawei.guolei.guolei2017126.model.MainModel;
import com.bawei.guolei.guolei2017126.model.ModelCallBack;
import com.bawei.guolei.guolei2017126.view.MainView;
/**
* Created by Lenovo on 2017/12/6.
*/
public class MainPresenter {
private MainView iView;
private MainModel mainModel;
public MainPresenter(MainView view){
this.iView=view;
this.mainModel=new MainModel();
}
public void get(){
mainModel.getData(new ModelCallBack() {
@Override
public void success(Bean bean) {
if (iView!=null){
iView.success(bean);
}
}
@Override
public void failure(Exception e) {
if (iView!=null){
iView.failure(e);
}
}
});
}
}
效果如下: