Dagger2是一个依赖注入框架,在解耦合方面堪称强大。如果你还不知道什么是依赖注入,以及使用Dagger2的原因,那么还是麻烦你先去google、百度一下,这里我暂时不会涉及dagger2的原理,而是使用一个非常简单的MVP例子来应用dagger2。为什么要使用MVP的例子讲解呢?因为dagger2和MVP是天造地设的一对~、
一、不使用dagger2的MVP Demo
这个MVP Demo非常简单,模拟手机号码归属地查询的实现。如下图,在EditText中输入手机号码,点击查询按钮,就会显示出手机号码所归属的省市。PS:为了简(偷)便(懒),这里并不存在网络请求,我只是模拟了这一过程而已,所以手机号输入可以是随意的字符即可,只要保证EditText的内容不为空就可以了,各位见怪勿怪哈哈哈~
MVP分为model、view、和presenter,其中Activity承担View的角色,只负责控件的显示和更新。model负责业务逻辑和各种数据实体,presenter则负责连接Activity。
1、View
首先是IQueryView.java
public interface IQueryView {
//查询成功后,显示手机归属地的查询结果
void showSuccessMsg(String successMsg);
//查询失败,显示失败原因
void showErrorMsg(String errorMsg);
}
然后在MainActivity中实现该接口:
MainActivity.class
public class MainActivity extends AppCompatActivity implements IQueryView,View.OnClickListener{
//输入手机号码
EditText et;
//显示查询结果
TextView tv;
Button btn;
//presenter的实现在下面
public QueryPresenter presenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
et= (EditText) findViewById(R.id.et);
tv= (TextView) findViewById(R.id.tv_res);
btn= (Button) findViewById(R.id.btn_query);
presenter=new QueryPresenter(this);
btn.setOnClickListener(this);
}
//在TextView中显示查询结果,Activity只负责View的更新和显示
@Override
public void showSuccessMsg(String successMsg) {
tv.setText(successMsg);
}
//查询失败时,Toast提示
@Override
public void showErrorMsg(String errorMsg) {
Toast.makeText(