Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
arvalon
21 / 6 / 2
Регистрация: 26.10.2012
Сообщений: 167
Записей в блоге: 1
#1

Не до конца понимаю Dagger2 - Программирование Android

16.09.2016, 15:42. Просмотров 136. Ответов 0
Метки нет (Все метки)

Доброго дня.
Изучаю библиотеку Dagger2 для реализации Dependency Injection
Кодил проект из del
 Комментарий модератора 
кода на форуме достаточно


Что в итоге получилось:
Класс Motor
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public class Motor {
 
    private int rpm;
 
    public Motor(){
        this.rpm = 10; //default will be 10
    }
 
    public int getRpm(){
        return rpm;
    }
 
    public void accelerate(int value){
        rpm = rpm + value;
    }
 
    public void brake(){
        rpm = 0;
    }
}

Класс Vehicle
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Vehicle {
 
    private Motor motor;
 
    @Inject
    public Vehicle(Motor motor){
        this.motor = motor;
    }
 
    public void increaseSpeed(int value){
        motor.accelerate(value);
    }
 
    public void stop(){
        motor.brake();
    }
 
    public int getSpeed(){
        return motor.getRpm();
    }
}

Класс-модуль VehicleModule
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Module
public class VehicleModule {
/*
    @Provides
    @Singleton
    Motor provideMotor(){
        return new Motor();
    }
*/
    @Provides
    @Singleton
    Vehicle provideVehicle(){
        return new Vehicle(new Motor());
    }
 
}

Компонент-интерфейс VehicleComponent
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
@Singleton
@Component(modules = {VehicleModule.class})
public interface VehicleComponent {
    Vehicle provideVehicle();
    void inject(MainActivity mainActivity);
}

build.gradle, где больше всего в итоге ковырялся
Кликните здесь для просмотра всего текста
JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
apply plugin: 'com.android.application'
apply plugin: 'com.neenbedankt.android-apt'
 
buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        // replace with the current version of the Android plugin
        classpath 'com.android.tools.build:gradle:1.3.0'
        // the latest version of the android-apt plugin
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}
 
android {
    compileSdkVersion 24
    buildToolsVersion "24.0.1"
 
    defaultConfig {
        applicationId "ru.arvalon.dagger2vehiclemotor2"
        minSdkVersion 19
        targetSdkVersion 24
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
 
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:24.2.0'
    compile 'com.google.dagger:dagger:2.7'
    compile 'com.google.dagger:dagger-compiler:2.7'
    compile 'org.glassfish:javax.annotation:10.0-b28'
}


Класс MainActivity
Кликните здесь для просмотра всего текста
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Toast;
 
import javax.inject.Inject;
 
public class MainActivity extends AppCompatActivity {
 
    @Inject
    Vehicle vehicle;
 
    //@Inject
    //Motor motor;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
 
        VehicleComponent component=DaggerVehicleComponent.create();
 
        component.inject(this);
 
        vehicle.increaseSpeed(20);
 
        Toast.makeText(this,String.valueOf(vehicle.getSpeed()),Toast.LENGTH_LONG).show();
 
        vehicle.stop();
 
        //motor.accelerate(100);
 
    }
}


И это заработало. Но не понимаю зачем в классе Vehicle конструктору класса аннотация @Inject? Работает и без неё.
Java
1
2
3
4
@Inject
    public Vehicle(Motor motor){
        this.motor = motor;
    }
Инджектися же поле vehicle типа Vehicle уже в MainActivity. А мотор и машина связываются в модуле.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2016, 15:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не до конца понимаю Dagger2 (Программирование Android):

Не понимаю до конца Хавтмана - Алгоритмы
Допустим есть символы z1-z8 у каждого своя вероятность Посчитав по Хавтману, получилосись данные, например z1=11, z=...(в двоичной),...

Не до конца понимаю интерфейсы - Java
Народ, помогите, никак не могу раздуплить как использовать интерфейсы. Я читал, что это как бы абстрактный класс. И при этом все методы у...

До конца не понимаю с запросами - MS Access
Создать запросы на выборку в соответствии с заданием. Задания: Выбрать сведения о всех клиентах из заданного города. Подсчитать общую...

Не до конца понимаю работу с итераторами - C++
Реализовать вспомогательный класс, который мог бы работать как заместитель контейнера, обеспечивая для пользователей полный интерфейс...

Не до конца понимаю механизм отсечений - Prolog
Здравствуйте! Есть следующая задача: domains list=integer* predicates split(integer,list,list,list) clauses ...

Паттерны, не до конца понимаю итератор и одиночку - C#
Пожалуйста, помогите, никак не могу осилить паттерны, немного задачи с горем пополам сделала, а дальше ступор. Спасибо за любую помощь! ...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2016, 15:42
Привет! Вот еще темы с ответами:

Array_udif не до конца понимаю принцип работы - PHP
задача стоит сравнить значения двух многомерных массивов. примеры массивов array1 = => Array ( =>...

Не понимаю до конца адресацию в двумерном массиве - Assembler
Задача: задать двумерный массив 4*5 целых чисел. Сложить два числа: первое – из строки 2, столбца 3; второе - из строки 3, столбца 4. Вот...

Не до конца понимаю работу системных папок (права доступа) - Администрирование Windows
Основы основ. Стыдно заранее:cry: Вопрос банальный, но не могу понять (или сформировать запрос Гуглу) Папка "Program Files" для...

Не понимаю до конца почему не работает пару вещей в программе. - Assembler
Суть следующая. В первой программе все работает нормально.кроме вывода результата на экран.он выводится как код ASC.а нужно обычным...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru