说明
适用于没有接触过dagger2的朋友,这里只是最简单的使用.为继续学习使用dagger2铺平第一步的道路.
简单使用方法示例
作为一个进入android开发这么久的小程序猿,还没有用过Dagger2框架,表示很尴尬啊.最新看网上写的项目大多都用了这个Dagger2框架,特别是最近想研究下mvp模式开发.据说这两个组合会非常好.所以就简单的学习了下.在网上也看了一些讲解.对于小白猿的我表示云里雾里啊.试了好多种讲解.到最后都失败了.直到看了一篇博客的概念.觉着挺顺的.就成功了.在这里记录下我实现的步骤.以备以后查阅并帮助和我在一条道路上艰难前行的朋友铺平下道路.当然,我这里只是最最最简单的实现方法.而且demo也没有什么实际意义.只是能用了而已.
ps: 这篇笔记只是最dagger2最简单的引用.如果是大神看到的话,可以指点下我哪里使用的不对.如果是和我一样刚接触dagger2,并且被网上一堆原理和概念的东西砸晕的朋友.可以借鉴下.
学习地址
我的主要的思路都是在这里看到的,需要的朋友可以去看下原版.
传送门
第一步:引入apt
使用apt来自动生成代码进行依赖注入,在项目的根目录中的bugild.gradle文件中的dependencies节点中添加apt支持.
代码如下:
//帮助dagger2生成依赖注入的代码
classpath 'com.neenbedankt.gradle.plugins:android-apt:1.4'
第二步:引入Dagger2
在module(我的项目是app目录)里的bugild.gradle添加Dagger2的导入语句
注意:这里图片和下边的代码有点不同,按照下边的代码来
等等… 为什么这么多的引入…
(ps:我也是刚接触,具体的也不明白怎么回事,但是我找到了一片文章,简单的说明了下,有兴趣的朋友可以去看下
传送门)
代码如下:
//Dagger2的配置
provided 'org.glassfish:javax.annotation:10.0-b28'
compile 'com.google.dagger:dagger:2.5'
apt 'com.google.dagger:dagger-compiler:2.5'
第三步:使用apt工具
在app目录中的build.gradle中的头部添加使用工具语句
代码如下:
apply plugin: 'com.neenbedankt.android-apt'
第四步:编写需要注入的对象实体类
我的理解就是Dagger2是一个注入框架,帮助我们实现对象的实例化和解耦操作的.所以第一个实际的编写我选择编写需要注入的对象实体类.
package com.test.bangtv.view;
/**
* 用户实体类
* Created by 64563 on 2017/6/8.
*/
public class User {
/**
* 用户名字
*/
public String name;
/**
* 用户ID
*/
public String id;
/**
* 密码
*/
public String password;
public User() {
}
}
第五步:编写提供注入对象的容器
package com.test.bangtv.view;
import dagger.Module;
import dagger.Provides;
/**
* 提供登陆页面的依赖对象的实例
* Created by 64563 on 2017/6/8.
*/
@Module//提供依赖对象的实例
public class LoginModule {
@Provides
//关键字,标明该方法提供依赖对象
User providerUser() {
//提供的对象
return new User();
}
}
第六步:编写容器与调用者的桥梁
package com.test.bangtv.view;
import dagger.Component;
/**
* 连接提供对象的容器与使用对象的调用者
* Created by 64563 on 2017/6/8.
*/
@Component(modules = LoginModule.class)
public interface LoginComponent {
//定义注入方法
void inject(LoginActivity loginActivity);
}
第七步:编译出注入工具类
到这里就直接编译下项目就好了
第八步:在调用对象的地方初始化注入工具对象及容器对象
package com.test.bangtv.view;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RelativeLayout;
import android.widget.Toast;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.OnClick;
import com.test.bangtv.R;
import javax.inject.Inject;
/**
* 登陆界面
*/
public class LoginActivity extends AppCompatActivity {
@Inject//标明需要注入的对象
User user;
@BindView(R.id.activity_login_name)
EditText activityLoginName;
@BindView(R.id.activity_login_pwd)
EditText activityLoginPwd;
@BindView(R.id.activity_login_register)
Button activityLoginRegister;
@BindView(R.id.activity_login_login)
Button activityLoginLogin;
@BindView(R.id.activity_login)
RelativeLayout activityLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
ButterKnife.bind(this);
//初始化注入工具类(如果找不到 DaggerLoginComponent说明没有编译成功
LoginComponent component = DaggerLoginComponent.builder().loginModule(new LoginModule()).build();
//注入
component.inject(this);
}
@OnClick(R.id.activity_login_register)
public void register(View view) {
Toast.makeText(this, "注册按钮被点击了", Toast.LENGTH_LONG).show();
}
@OnClick(R.id.activity_login_login)
public void login(View view) {
String name = activityLoginName.getText().toString();
String pwd = activityLoginPwd.getText().toString();
if (TextUtils.isEmpty(name) || TextUtils.isEmpty(pwd)) {
Toast.makeText(this, "账号名或密码不能为空", Toast.LENGTH_SHORT).show();
return;
}
user.name = name;
user.password = pwd;
Toast.makeText(this, "账号:" + user.name + "登陆成功", Toast.LENGTH_SHORT).show();
}
}
结束
第一次写博客,有点小小的尴尬.如果有哪里写的不对的,或者是有待改进的朋友可以找我哈.