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。