Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android @Inject不是初始化字段_Android_Dependency Injection - Fatal编程技术网

Android @Inject不是初始化字段

Android @Inject不是初始化字段,android,dependency-injection,Android,Dependency Injection,我第一次学习Dragger 2,面临的问题是我的课程代码 public class User { private String firstName; private String lastName; public User(String firstName, String lastName) { this.firstName = firstName; this.lastName = las

我第一次学习Dragger 2,面临的问题是我的课程代码

    public class User {

        private String firstName;
        private String lastName;

        public User(String firstName, String lastName) {
            this.firstName = firstName;
            this.lastName = lastName;
        }

        @Override
        public String toString() {
            return "User [firstName=" + firstName + ", lastName=" + lastName + "]";
        }
 }
以及具有用户依赖关系的BackendService类

public class BackendService {

    @Inject
    public User user;

    private String serverUrl;

    @Inject
    public BackendService(@Named("serverUrl") String serverUrl) {
        this.serverUrl = serverUrl;
    }

    public boolean callServer() {
        if (user !=null && serverUrl!=null && serverUrl.length()>0) {
            System.out.println("User: " + user + " ServerUrl: "  + serverUrl);
            return true;
        }
        return false;
    }

}
和后端服务模块

@Module
public class BackEndServiceModule {

    @Provides
    @Singleton
     BackendService provideBackendService(@Named("serverUrl") String serverUrl) {
        return new BackendService(serverUrl);
    }

    @Provides
    @Singleton
    @Named("serverUrl")
     String provideServerUrl() {
        return "http://www.vogella.com";
    }

    @Provides
    @Singleton
    @Named("anotherUrl")
    String provideAnotherUrl() {
        return "http://www.google.com";
    }
}
和用户模块

@Module
public class UserModule {

    @Provides
    @Singleton
     User providesUser() {
        return new User("James","Peter");
    }
}
以及MyComponent

@Singleton
@Component(modules = { UserModule.class, BackEndServiceModule.class})
public interface MyComponent {
    void inject(TestClass activity);
}
我的测试类代码是

public class TestClass {

    @Inject
    BackendService backendService; //

    private MyComponent component;

    public TestClass(){

        component = DaggerMyComponent.builder().build();
        component.inject(this);

        callServer();

    }


    private void callServer() {
        boolean callServer = backendService.callServer();
        if (callServer) {

            Log.v("TestClass","Server call was successful."+backendService.user);
        } else {

            Log.v("TestClass","Server call failed."+backendService.user);
        }
    }
} // this is alway null backendService.user

问题是BackendService中的用户字段始终为空。请指出我的问题所在。

BackenService
构造函数中添加
用户
参数,并从
用户
变量中删除
@Inject
注释

   public User user

    @Inject
    public BackendService(@Named("serverUrl") String serverUrl,User user) {
        this.serverUrl = serverUrl;
        this.user=user
    }
并删除BackendService提供程序方法

Remove this
@Provides
    @Singleton
     BackendService provideBackendService(@Named("serverUrl") String serverUrl) {
        return new BackendService(serverUrl);
    }