我試圖在Android應用程序中做一個非常簡單的依賴注入。我使用匕首2作爲DI工具。匕首2 - 無法注入對象
的問題是沒有注入正在發生:
這裏是我的代碼:
//在其所有的敬畏注視Motor.java。
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其中公用事業類電機:
import javax.inject.Inject;
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類來定義我的供應商:
import javax.inject.Singleton;
import dagger.Module;
import dagger.Provides;
@Module
public class VehicleModule {
@Provides
@Singleton
Motor provideMotor(){
return new Motor();
}
@Provides @Singleton
Vehicle provideVehicle(){
return new Vehicle(new Motor());
}
}
我的話,我有一個接口組件註釋,定義如下:
import javax.inject.Singleton;
import Modules.VehicleModule;
import dagger.Component;
@Singleton
@Component(modules = {VehicleModule.class})
public interface VehicleComponent {
Vehicle provideVehicle();
}
這裏是一個應該被注入我的Android MainActivity類別,但它不是,誰能幫助:
import javax.inject.Inject;
public class MainActivity extends ActionBarActivity {
@Inject
Vehicle vehicle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(this, String.valueOf(vehicle.getSpeed()), Toast.LENGTH_SHORT).show();
}
}
即時得到車輛空指針異常:順便說
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.example.uen229.myapplication.Vehicle.getSpeed()' on a null object reference
我gradle這個依賴是這樣的:
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:22.2.0'
compile 'com.google.dagger:dagger:2.0'
}
它說它不能在IDE中找到DaggerVehicleComponent。有任何想法嗎 ?我刪除了注入註解,並遵循你的第一個方法,所以我可以製作私有方法。它的包裹在當地。現在每個地方都包裝在當地。但它沒有找到DaggerVehicleComponent。我猜這是自動生成的東西。 – j2emanue
查看我的答案[這裏](http://stackoverflow.com/a/29707308/675383),瞭解如何讓Android Studio找到生成的類。 – nhaarman
使用此應用插件:'com.neenbedankt.android-apt',並在build.gradle文件中:classpath'com.neenbedankt.gradle.plugins:android-apt:1.4'讓它爲我自動生成類。你的解釋非常好。謝謝你,先生。 – j2emanue