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

Не до конца понимаю Dagger2 - Android

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Перенести базу на флешку и назад http://www.cyberforum.ru/android-dev/thread1808400.html
Гуру, дайте совет! Хочу дать юзеру возможность перекладывать базу (когда разрастется) из папки программы на большую флешку. Технически не сложно (переместить файл, переподключиться к базе), но хочу сделать перенос 1) системными средствами (у некоторых программ есть возможность в списке программ "перенести на флешку") 2) в настройки самой программы добавить И свою кнопку управления этим...
Android Антивирус AVG ругается на приложение перепакованное apktool Здравствуйте. Сегодня заметил, что если с помощью apktool распаковать и запаковать apk (без каких-либо изменений), антивирус AVG странным образом начинает на него ругаться, пробовал разные версии apklool, даже на разных машинах это проделывал. Я слабо верю, что apktool заражает чем-то файлы. Сам apktool как вирус не распознается, есть подозрение на мои ноуты. Буду благодарен если кто-то проверит... http://www.cyberforum.ru/android-dev/thread1808195.html
Android Найти виджет по изображению
А если допустим у меня есть картинка(изображение) где размещен какой то виджет, но я не знаю как он называется, потому что в первый раз его встретил да и словами описать сложновато. Но я хочу найти в гугле как его реализовать. Может быть вообще виджет этот реализован в какой то библиотеке коих очень много, но по дизайну мне нужно использовать его в своем проекте. И как быть, как быстро найти...
Android Поиск в большом проекте Android Studio
Если у меня есть большой проект и этот проект писал не я. Но я хочу найти в этом коде, ну скажем место, где формируется push уведомление для его отображения на устройстве. Найти фрагмент кода в этом огромном проекте, который например за это отвечает. Как лучше всего это сделать средствами Android Studio ? Заранее спасибо за ответ.
Android Что дает @NonNull ? http://www.cyberforum.ru/android-dev/thread1808045.html
Например @NonNull public List<Status> statusList = new ArrayList<>(); Просто нельзя будет statusList = null?
Android Не работает replace Почему то не работает String sSpeed = Double.toString(speed); sSpeed.replace(".","@"); точка не меняется на @ почему .. непонятно. подробнее

Показать сообщение отдельно
arvalon
15 / 0 / 0
Регистрация: 26.10.2012
Сообщений: 111

Не до конца понимаю Dagger2 - Android

16.09.2016, 15:42. Просмотров 130. Ответов 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. А мотор и машина связываются в модуле.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 16:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru