aaaMVP的框架(拦截器)

MVP三个方法,Presenter和Model和View方法。

public interface IShowContract {

    public abstract class IShowPresenter{
        public abstract void show(HashMap<String,String> params);
    }
    interface IShowModel{
        void show(HashMap<String,String> params, RequestCallback requestCallback);
    }
    interface IShowView{
        void onKeywordError(String error);
        void PageError(String error);
        void FailUre(String msg);
        //void Success(User user);
        void onSuccess(User user);
        void onSuccessMsg(String msg);
    }
}

首先在model包下,创建一个showModel的interface,实现拦截器中的model的方法以及接口。

public class IShowModel implements IShowContract.IShowModel {
Handler handler = new Handler();
    @Override
    public void show(HashMap<String, String> params, final RequestCallback requestCallback) {
        OkhttpUtils.getmInstance().doPost(UserApi.USER_SHOW, params, new OkhttpCallback() {
            @Override
            public void failUre(String msg) {
                if(requestCallback != null){
                    handler.post(new Runnable() {
                        @Override
                        public void run() {
                          requestCallback.onFailUre("网络异常");
                        }
                    });
                }
            }

            @Override
            public void success(String result) {
                if(!TextUtils.isEmpty(result)){
                    requestCall(result,requestCallback);
                }
            }
        });
    }
    private void requestCall(String result,final RequestCallback requestCallback){
        final User user = new Gson().fromJson(result, User.class);
        if (requestCallback != null){
            handler.post(new Runnable() {
                @Override
                public void run() {
                    requestCallback.onSuccess(user);
                }
            });
        }
    }

以上是model层的代码。
然后创建一个presenter的包,包下创建一个showpresenter,继承拦截器的presenter的方法以及回调接口。

public class ShowPresenter extends IShowContract.IShowPresenter {

    private IShowModel showModel;
    private IShowContract.IShowView iShowView;

    public ShowPresenter(IShowContract.IShowView iShowView) {
        this.showModel = new IShowModel();
        this.iShowView = iShowView;
    }

    @Override
    public void show(HashMap<String, String> params) {
        if(showModel != null){
            showModel.show(params, new RequestCallback() {
                @Override
                public void onFailUre(String msg) {
                    if(iShowView != null){
                        iShowView.FailUre(msg);
                    }
                }

                @Override
                public void onSuccess(User user) {
                    if(iShowView != null){
                        iShowView.onSuccess(user);
                    }
                }

                @Override
                public void onSuccessMsg(String msg) {
                    if(iShowView != null){
                        iShowView.onSuccessMsg(msg);
                    }
                }
            });
        }
    }
}

然后开始view层的代码,view层表示的就是activity方面的代码,这个mainactivity需要实现拦截器中的view方法以及接口。

public class MainActivity extends AppCompatActivity implements IShowContract.IShowView {
    private Button but_search;
    private String keywords;
    private ShowPresenter presenter;
    private Adapter adapter;

   /* @BindView(R.id.et_title)
    EditText et_title;*/
    private RecyclerView recyclerView;
    private EditText et_title;
    //    @BindView(R.id.rcv)
//    RecyclerView rv;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();

        ButterKnife.bind(this);
        but_search.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                keywords = et_title.getText().toString().trim();
                HashMap<String, String> params = new HashMap<>();
                params.put("keywords", keywords);
                params.put("page", "1");
                presenter.show(params);
            }
        });

        presenter = new ShowPresenter(MainActivity.this);
        adapter = new Adapter(MainActivity.this);

    }

    private void initView() {
        //寻找id
        but_search = findViewById(R.id.but_search);
        et_title = findViewById(R.id.et_title);
        recyclerView = findViewById(R.id.rcv);
        recyclerView.setLayoutManager(new LinearLayoutManager(MainActivity.this));
    }

    @Override
    public void onKeywordError(String error) {
        Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void PageError(String error) {
        Toast.makeText(this, error, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void FailUre(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onSuccess(User user) {
        List<User.DataBean> data = user.getData();
        adapter.setList(data);
        recyclerView.setAdapter(adapter);
    }

    @Override
    public void onSuccessMsg(String msg) {
        Toast.makeText(this, msg, Toast.LENGTH_SHORT).show();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        OkhttpUtils.getmInstance().cancelAllTask();
    

最后一个就是Adapter啦,使用了recycleview。
首先创建一个Adapter的包,下面创建一个class的adapter。

public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> {

    private Context context;
    private List<User.DataBean> list;

    public Adapter(Context context) {
        this.context = context;
        this.list = new ArrayList<>();
    }
    //设置列表数据
    public void setList(List<User.DataBean> list){
        if(list != null){
            this.list = list;
        }
        notifyDataSetChanged();
    }

    @NonNull
    @Override
    public Adapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
       View view = LayoutInflater.from(context).inflate(R.layout.linear,viewGroup,false);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(@NonNull Adapter.ViewHolder viewHolder, int i) {
       final User.DataBean dataBean = list.get(i);
       final String[] split = dataBean.getImages().split("!");
       Glide.with(context).load(split[0]).into(viewHolder.image);
       viewHolder.title.setText(list.get(i).getTitle());
       viewHolder.price.setText(list.get(i).getPrice()+"");
    }

    @Override
    public int getItemCount() {
        return list.size();
    }
    public class ViewHolder extends RecyclerView.ViewHolder{//生成一个方法

        private ImageView image;
        private TextView title;
        private TextView price;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
          image = itemView.findViewById(R.id.image);
          title = itemView.findViewById(R.id.title);
          price = itemView.findViewById(R.id.price);
        }
    }
}

代码中,最后一个ViewHolder方法是自己创建的用来寻找条目的各个id。

猜你喜欢

转载自blog.csdn.net/weixin_43808025/article/details/85570506