BaseMvp+rxjava+retrofit+recyclerview

1.创建BasePresenter类

public class BasePresenter<V> {
    public V view;
    public void attach(V v){
        this.view = v;
    }
    public void dttach(){
        this.view = null;
    }
}
2.创建BaseMvpActivity
public abstract class BaseMvpActivity<V,T extends BasePresenter<V>> extends Activity {
public T t;
   public abstract T initPresenter();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
          t=initPresenter();
    }
    @Override
    protected void onResume() {
        super.onResume();
        t.attach((V) this);
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        t.dttach();
    }
}
 
 
3.创建Bean
public class Bean {
private int code;
    private String msg;
    private List<NewslistBean> newslist;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<NewslistBean> getNewslist() {
        return newslist;
    }

    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }

    public static class NewslistBean {
        /**
         * ctime : 2016-12-04 13:00
         * title : 格林:理解科尔吸食大麻 不过我从没吸过
         * description : NBA新闻
         * picUrl : http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg
         * url : http://www.51tyw.com/nba/2421.html
         */

        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;

        public String getCtime() {
            return ctime;
        }

        public void setCtime(String ctime) {
            this.ctime = ctime;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getPicUrl() {
            return picUrl;
        }

        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }

    @Override
    public String toString() {
        return "Bean{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", newslist=" + newslist +
                '}';
    }
}

private int code;
    private String msg;
    private List<NewslistBean> newslist;

    public int getCode() {
        return code;
    }

    public void setCode(int code) {
        this.code = code;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    public List<NewslistBean> getNewslist() {
        return newslist;
    }

    public void setNewslist(List<NewslistBean> newslist) {
        this.newslist = newslist;
    }

    public static class NewslistBean {
        /**
         * ctime : 2016-12-04 13:00
         * title : 格林:理解科尔吸食大麻 不过我从没吸过
         * description : NBA新闻
         * picUrl : http://www.51tyw.com/uploads/allimg/161204/1-161204120131.jpg
         * url : http://www.51tyw.com/nba/2421.html
         */

        private String ctime;
        private String title;
        private String description;
        private String picUrl;
        private String url;

        public String getCtime() {
            return ctime;
        }

        public void setCtime(String ctime) {
            this.ctime = ctime;
        }

        public String getTitle() {
            return title;
        }

        public void setTitle(String title) {
            this.title = title;
        }

        public String getDescription() {
            return description;
        }

        public void setDescription(String description) {
            this.description = description;
        }

        public String getPicUrl() {
            return picUrl;
        }

        public void setPicUrl(String picUrl) {
            this.picUrl = picUrl;
        }

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }
    }

    @Override
    public String toString() {
        return "Bean{" +
                "code=" + code +
                ", msg='" + msg + '\'' +
                ", newslist=" + newslist +
                '}';
    }
}
4创建IAppliction类
 
 
public class IAppliction extends Application {

    public static IInterface iInterface;

    @Override
    public void onCreate() {
        super.onCreate();
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl("http://api.tianapi.com")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
        iInterface = retrofit.create(IInterface.class);
    }
}
5创建IInterface类
public interface IInterface {

    @GET("/nba")
    Observable<Bean> get(@QueryMap Map<String,String> map);

    @POST("/nba")
    Observable<Bean> post(@FieldMap Map<String,String> map)
}
6.创建HomeAdapter类
 
 
public class HomeAdapter extends RecyclerView.Adapter<HomeAdapter.MyViewHolder> {
    Context context;
    List<Bean.NewslistBean> list;

    public HomeAdapter(Context context, List<Bean.NewslistBean> list) {
        this.context = context;
        this.list = list;
    }

    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
       View view =   LayoutInflater.from(context)
                .inflate(R.layout.item_home, parent,false);
       TextView textView = (TextView) view.findViewById(R.id.tv);
        MyViewHolder holder = new MyViewHolder(view);
        return holder;
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        //Toast.makeText(context,""+position,Toast.LENGTH_SHORT).show();
        holder.tv.setText(list.get(position).getTitle());
}

    @Override
    public int getItemCount() {
        return list.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder{
         TextView tv;

        public MyViewHolder(View itemView) {
            super(itemView);

            tv = itemView.findViewById(R.id.tv);
        }
    }
}
//最后几个login类


public interface LoginView {
    void success(Bean bean);
    void failed();
}


public interface LoginModelCallBack {
   void success(Bean bean);
}


public class LoginModelImpl {
    public void getData(final LoginModelCallBack callBack){

        Map<String,String> map = new HashMap<>();
        map.put("key","71e58b5b2f930eaf1f937407acde08fe");
        map.put("num","10");

        Observable<Bean> beanObservable = IAppliction.iInterface.get(map);
        beanObservable.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) {
                      callBack.success(bean);
                    }
                });

    }
}


public class LoginPresenter extends BasePresenter<LoginView> {
    public LoginModelImpl loginModel;

    public LoginPresenter() {
        this.loginModel = new LoginModelImpl();
    }
    public void login(String username,String password){
        loginModel.getData(new LoginModelCallBack() {
            @Override
            public void success(Bean bean) {
                view.success(bean);
            }
        });
    }
}



public class MainActivity extends BaseMvpActivity<LoginView,LoginPresenter> implements LoginView {
   RecyclerView rv;
    @Override
    public LoginPresenter initPresenter() {
        return new LoginPresenter();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rv = (RecyclerView) findViewById(R.id.lv);
        rv.setLayoutManager(new LinearLayoutManager(this));
        findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
            t.login("username","password");
            }
        });
    }

    @Override
    public void success(Bean bean) {
  System.out.println("---------"+bean);
//        ListAdapter listAdapter = new ListAdapter(MainActivity.this, bean.getNewslist());
        HomeAdapter homeAdapter = new HomeAdapter(MainActivity.this, bean.getNewslist());
        rv.setAdapter(homeAdapter);

    }

    @Override
    public void failed() {

    }
}


猜你喜欢

转载自blog.csdn.net/mydtudysy/article/details/78731606