写一个最简单的demo理解MVP的本质,作为一个Android程序员你还不会JetPack

之后model层获取的数据,将会通过接口传递到activity中,进行展示。从某种意义上来说,接口其实就是mvp中的view层。因为activity只是这个接口的实现而已。那么我们接下来看一下model层是怎么写的。

public class MainModel {
public Call getData(String url) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().url(url).build();
return client.newCall(request);
}
}

同样很简单,这个应该只是okhttp的基础用法。这里我们没有调用enqueue方法传入callback,是为了之后在presenter中使用,当然你也可以在这里调用,不过这样一来,你又要在model中声明一个接口。好了,“view层”和model层都有了,那么最后只要再有presenter层,那么mvp就完成了。

public class MainPresenter {
private MainCallBack callBack;
private MainModel model;

public MainPresenter(MainCallBack callBack) {
this.callBack = callBack;
model=new MainModel();
}

public void getUrlData(String url){
model.getData(url).enqueue(new Callback() {
@Override
public void onFailure(@NonNull Call call, @NonNull IOException e) {
callBack.error();
}

@Override
public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
callBack.getMessage(response.body().string());
}
});
}

}

这是一个典型的mvp模式中的presenter层:接口通过构造函数传入,model直接在构造函数中实例化。presenter中调用model的getdata方法,并传入对应的参数,之后在okhttp的回调中调用对应的ui接口,那么一次mvp模式下的网络请求就完成了。
具体操作可以看一下activity中的代码:

public class MainActivity extends AppCompatActivity implements MainCallBack {
private TextView resultTextView;
private MyHandler handler;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.btn);
handler = new MyHandler(this);
final EditText editText = findViewById(R.id.et_url);
resultTextView = findViewById(R.id.tv_result);
final MainPresenter presenter = new MainPresenter(this);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String url = editText.getText().toString();
presenter.getUrlData(url);
}
});

}

@Override
public void getMessage(String message) {
Message msg = handler.obtainMessage(0, message);
handler.sendMessage(msg);
}

@Override
public void error() {
Message msg = handler.obtainMessage(1, “error”);
handler.sendMessage(msg);
}

private static class MyHandler extends Handler {
private WeakReference reference;

private MyHandler(MainActivity activity) {
reference = new WeakReference<>(activity);
}

@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
MainActivity activity = reference.get();
switch (msg.what) {
case 0:
activity.resultTextView.setText(msg.obj.toStr写一个最简单的demo理解MVP的本质,作为一个Android程序员你还不会JetPack_第1张图片
ing());
break;
case 1:
activity.resultTextView.setText(msg.obj.toString());
break;
}
}
}
}

)]
ing());
break;
case 1:
activity.resultTextView.setText(msg.obj.toString());
break;
}
}
}
}

你可能感兴趣的:(程序员,架构,移动开发,android)