Dagger2的简单使用

说明

适用于没有接触过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();
    }
}

结束

第一次写博客,有点小小的尴尬.如果有哪里写的不对的,或者是有待改进的朋友可以找我哈.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值