2015-03-24 2 views
5

Я новичок в Отто, и у меня возникли серьезные проблемы с его функционированием вместе с инжектором зависимостей кинжала и JobManager. Всякий раз, когда я запускаю мое приложение, я получаю то же сообщение об ошибке:NullPointerException с Отто и кинжалом

"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". 

Линия она reffers это одна:

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 каким-то образом?

ответ

5

Вы не вводите MainActivity в onCreate с помощью графа объектов. Это все.

Просто позвоните

MyApplication.get().inject(this); 

в MainActivity OnCreate().

+1

Кроме того, вы не регистрируетесь на своем автобусе, что может вызвать проблемы позже. – EpicPandaForce

+0

Да, я, но я не копировал этот фрагмент кода. Большое вам спасибо :) Однако я до сих пор не понимаю, почему мне нужно добавить эту строку. Что я сделал, добавив это? –

+1

Это заставляет кинжал вставлять вашу MainActivity с материалом, который вы указали с помощью '@ Inject'. – EpicPandaForce

Смежные вопросы