MVP+xRecyclerView+Retrofit+OkHttp+RxJava

依賴
compile 'com.android.support:recyclerview-v7:26.0.+'
compile 'com.facebook.fresco:fresco:0.12.0'

// Retrofit庫
compile 'com.squareup.retrofit2:retrofit:2.0.1'
// Okhttp庫
compile 'com.squareup.okhttp3:okhttp:3.1.2'

// rxjava+rxandroid+retrofit2+okhttp
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'

Api包裏倆個類
public interface BeanApi {
@GET("nba/")
Observable<Bean> bean( @QueryMap Map<String,String> map);
//http://api.tianapi.com/nba/?key="+APIKEY+"&num=10
}


public class MyAPI {
public static final String APIKEY="71e58b5b2f930eaf1f937407acde08fe";
public static final String utils="http://api.tianapi.com/";
}

MyApp

public class MyApp extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}


model包

接口
public interface IMOdel {

// 處理數據的方法
void GetData(int a);
}

工具類
public class BeanModel implements IMOdel {
ArrayList<Bean.NewslistBean> lists;

private OnFinish onFinish;

public BeanModel(OnFinish onFinish) {
this.onFinish = onFinish;
}

// 建立接口
public interface OnFinish{
void onFinishLinisher(ArrayList<Bean.NewslistBean> lists);
}

@Override
public void GetData(int a) {
lists = new ArrayList<>();

Retrofit retrofit = new Retrofit.Builder()
.baseUrl(MyAPI.utils)
.addCallAdapterFactory(RxJavaCallAdapterFactory.create())
.addConverterFactory(GsonConverterFactory.create())
.build();

// 經過動態代理得到網絡接口數據
BeanApi apiService = retrofit.create(BeanApi.class);
// Observable<Bean> data= (Observable<Bean>) apiService.bean();
Map<String,String> map=new HashMap<>();
map.put("key",MyAPI.APIKEY);
map.put("num",a+"");
Observable<Bean> data=apiService.bean(map);
// 設置請求數據時候的線程
data.subscribeOn(Schedulers.io())
// 設置請求結束後的線程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<Bean>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(Bean bean) {
// Log.d("main2", "onNext: " + bean.newslist + "----");
lists = (ArrayList<Bean.NewslistBean>) bean.newslist;
onFinish.onFinishLinisher(lists);
}
});
}
}

presenter包



public class UserPresenter implements BeanModel.OnFinish {
private final IView iview;
private final BeanModel userModel;

public UserPresenter(IView iview) {
this.iview = iview;
userModel = new BeanModel(this);
}

// 處理model與view的邏輯
public void getData(){
userModel.GetData(10);
}

@Override
public void onFinishLinisher(ArrayList<Bean.NewslistBean> lists) {
iview.ShowData(lists);
}
}

view包

public interface IView {
void ShowData(ArrayList<Bean.NewslistBean> lists);
}

MainActivity類
public class MainActivity extends AppCompatActivity  implements IView{
private RecyclerView rlv;
UserPresenter presenter;
MyXrecyclerviewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
}
private void init() {
rlv= (RecyclerView) findViewById(R.id.rlv);

// 初始化數據
initData();

}

private void initData() {
presenter = new UserPresenter(this);
presenter.getData();
}

@Override
public void ShowData(ArrayList<Bean.NewslistBean> lists) {
rlv.setLayoutManager(new LinearLayoutManager(this));
rlv.setAdapter(adapter = new MyXrecyclerviewAdapter(lists,this));
}
}

適配器

public class MyXrecyclerviewAdapter  extends RecyclerView.Adapter<MyXrecyclerviewAdapter.MyViewHolder> {    // 數據源    ArrayList<Bean.NewslistBean> lists;    // 上下文    Context context;    public MyXrecyclerviewAdapter(ArrayList<Bean.NewslistBean> lists, Context context) {        this.lists = lists;        this.context = context;    }    @Override    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType)    {        MyViewHolder holder = new MyViewHolder(LayoutInflater.from(context).inflate(R.layout.recy_item, parent,                false));        return holder;    }    @Override    public void onBindViewHolder(MyViewHolder holder, int position)    {        holder.tv.setText(lists.get(position).title);        Uri uri = Uri.parse(lists.get(position).picUrl);        holder.img.setImageURI(uri);    }    @Override    public int getItemCount()    {        return lists.size();    }    class MyViewHolder extends RecyclerView.ViewHolder    {        TextView tv;        SimpleDraweeView img;        public MyViewHolder(View view)        {            super(view);            tv =  view.findViewById(R.id.recy_item_tv);            img = view.findViewById(R.id.recy_item_img);        }    }}
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息