2013-06-19 2 views
9

Не работает ли работа с использованием .withIntent() в Robolectric 2? Я делаю следующееrobolectric 2 - создать активность с намерением

activity = Robolectric.buildActivity(MyActivity.class) 
          .create() 
          .withIntent(intent) 
          .get(); 

И я получаю NullPointerException при выполнении следующих действий в onCreate() моей деятельности.

Bundle bundle = getIntent().getExtras(); 

Я могу закодировать нулевую проверку в моем onCreate() и установить намерение, выполнив следующие действия, но это кажется излишним, чтобы установить намерение и вызвать метод onCreate() еще раз, когда Robolectric уже делает, что при создании экземпляра Activity. Это кажется ненужной работой.

Robolectric.shadowOf(activity).setIntent(intent); 
    activity.onCreate(null); 

ответ

3

Я понял мою проблему. Я не создавал Intent должным образом. Я создавал его с помощью конструктора no-arg, когда мне нужно было дать Context, а класс Activity был отправлен на адрес

+0

Как вы получаете контекст? –

+0

Что здесь происходит: новое намерение (Robolectric.application.getApplicationContext(), ??) –

+0

?? следует заменить на строительную деятельность. Итак, MyActivity.class –

6

Это тот случай, когда беглый стиле API типа ведет вас по ложному пути ...

Вы хотите:

activity = Robolectric.buildActivity(MyActivity.class) 
         .withIntent(intent) 
         .create() 
         .get(); 

так, что намерение предоставляется строитель, прежде чем он называетCreate().

+0

Я уже пробовал это. не работал для меня. 'getIntent()' все еще вернул null для меня – David

+0

Это не сработало для меня, так что я просто расширил MyActivity и переопределил onCreate. Там я назвал setIntent новым намерением. – user1055395

0

EDIT: он был исправлен в версии 2.2.

Я занимался той же проблемой. Это was reported, но исправления пока нет. На данный момент, мне удалось взломать его с помощью метода установки активность перед вызовом OnCreate(), пользуясь тем фактом, что его жизненный цикл еще не начался:

Intent intent = new Intent(); 
MainActivity mainActivity = Robolectric.buildActivity(MainActivity.class) 
             .create() 
             .get(); 
mainActivity.setIntent(intent); 
mainActivity.onCreate(null); 

3

Для более новых версий Robolectric используйте Robolectric.buildActivity(Class, Intent).

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