使用MVP+Retrofit+RxJava 圖片加載使用Fresco 做網絡請求並展示數據

網絡接口根據自己的去寫就好

Bean包自己按接口封裝



View層

view接口

public interface Show {
    void getdata(InfoBean infoBean);
}
回調接口
public interface OnNetListener {
    void Success(InfoBean infoBean);
}
Model層
public class GetdataModel {
    public void gatdata(String xbsjxw, String page, final OnNetListener onNetListener){
        Retrofit retrofit= new Retrofit.Builder()
                .baseUrl(Api.url)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        ApiService apiService = retrofit.create(ApiService.class);
        rx.Observable<List<InfoBean>> observable= apiService.GetData(xbsjxw, page);
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .flatMap(new Func1<List<InfoBean>, rx.Observable<InfoBean>>() {
                    @Override
                    public rx.Observable<InfoBean> call(List<InfoBean> infoBeen) {
                        return rx.Observable.from(infoBeen);
                    }
                }).subscribe(new Observer<InfoBean>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(InfoBean infoBean) {
                onNetListener.Success(infoBean);
            }
        });
    }

}
presenter層
public class GetPresenter implements OnNetListener {
    private Show show;
    private GetdataModel getdataModel;


    public GetPresenter(Show show) {
        this.show = show;
        getdataModel= new GetdataModel();

    }
    public void relevance(String txs,String page){
        getdataModel.gatdata(txs,page,this);
    }

    @Override
    public void Success(InfoBean infoBean) {
        show.getdata(infoBean);

    }
}


MyApp類
清檔文件裏記得註冊
public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}
Adapter類
public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<InfoBean.DataBean> list;
    private Context context;

    public MyAdapter(List<InfoBean.DataBean> list, Context context) {
        this.list = list;
        this.context = context;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

        View view = View.inflate(context, R.layout.xrv_item, null);

        return new MyViewHolder(view);
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        MyViewHolder myViewHolder = (MyViewHolder) holder;
        myViewHolder.sdv_xrv.setImageURI(Uri.parse(list.get(position).getImg()));
        myViewHolder.tv_item_xrv.setText(list.get(position).getTitle());
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    class MyViewHolder extends RecyclerView.ViewHolder {

        private final SimpleDraweeView sdv_xrv;
        private final TextView tv_item_xrv;

        public MyViewHolder(View itemView) {
            super(itemView);
            sdv_xrv = itemView.findViewById(R.id.sdv_xrv);
            tv_item_xrv = itemView.findViewById(R.id.tv_item_xrv);
        }
    }
}
MainActivity主類 也就是你要展示的也面

 
public class MainActivity extends AppCompatActivity implements Show {

   private XRecyclerView xrv;
    private GetPresenter presenter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        xrv= (XRecyclerView) findViewById(R.id.xrv);
        xrv.setLayoutManager(new LinearLayoutManager(this));
        presenter= new GetPresenter(this);
        presenter.relevance("txs","page_2.json");


    }


    @Override
    public void getdata(InfoBean infoBean) {
        List<InfoBean.DataBean> data=infoBean.getData();
        Log.i("TAG","getdata:"+data.get(0).getTitle());
        MyAdapter myAdapter = new MyAdapter(data, this);
        xrv.setAdapter(myAdapter);
        xrv.setLoadingListener(new XRecyclerView.LoadingListener() {
            @Override
            public void onRefresh() {
                presenter.relevance("txs","page_3.json");

                xrv.refreshComplete();
            }

            @Override
            public void onLoadMore() {
                xrv.loadMoreComplete();
            }
        });

    }
}
依賴:
compile 'com.jcodecraeer:xrecyclerview:1.3.2'
compile 'com.squareup.retrofit2:retrofit:2.0.1'
compile 'com.squareup.retrofit2:converter-gson:2.0.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.1'
compile 'io.reactivex:rxandroid:1.1.0'
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'
compile 'com.facebook.fresco:fresco:1.5.0'
compile 'com.squareup.okio:okio:1.5.0'
compile 'com.squareup.okhttp3:okhttp:3.2.0'
compile 'com.hjm:BottomTabBar:1.1.1'
compile 'com.astuetz:pagerslidingtabstrip:1.0.1'
testCompile 'junit:junit:4.12'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章