私は Otto を初めて使用し、Dagger 依存性インジェクターおよび JobManager と一緒に機能することを理解するのに深刻な問題を抱えています。アプリケーションを起動するたびに、同じエラー メッセージが表示され続けます。
"java.lang.RuntimeException: Unable to resume activity {sdos.juanjosemelero.pruebaormlite2/sdos.juanjosemelero.pruebaormlite2.MainActivity}:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.squareup.otto.Bus.register(java.lang.Object)' on a null object reference"
[...]
"Caused by java.lang.NullPointerException:
Attempt to invoke virtual method 'void com.squareup.otto.Bus.register(java.lang.Object)' on a null object reference".
それが参照する行は次のとおりです。
bus.register(this);
これは私の活動です:
public class MainActivity extends ActionBarActivity {
@Inject Bus bus;
@Override
protected void onResume() {
super.onResume();
bus.register(this);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.inject(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
bus.unregister(this);
}
}
そして、これが私の短剣インジェクションのモジュールです:
@Module(
injects = {MainActivity.class},
library = true
)
public class MyModule {
private final MyApplication application;
public MyModule (MyApplication application) {
this.application = application;
}
@Provides
@Singleton
MyApplication provideMyApplication() {
return application;
}
@Provides
@Singleton
public Bus provideBus (){
return new Bus(ThreadEnforcer.ANY);
}
}
そして、それを見るのが興味深い場合の MyApplication クラス:
public class MyApplication extends Application {
private ObjectGraph objectGraph;
private static MyApplication application;
//Constructor
public MyApplication() {
application = this;
}
@Override
public void onCreate() {
super.onCreate();
buildObjectGraph();
}
public void buildObjectGraph() {
objectGraph = ObjectGraph.create(new MyModule(this));
}
public void inject(Object o) {
objectGraph.inject(o);
}
public static MyApplication get() {
return application;
}
}
どういうわけか MainActivity を初期化すると思いますか?