Пропустите строки через несколько действий

У меня есть классы проектов, организованные в нескольких папках src, которые работали нормально, пока я не изменил переключатель между действиями, теперь включая передачу строк в следующее действие. Я думаю, что проблема связана с путем к классу.

                Bundle bundle = new Bundle();
                bundle.putString("email", userEmail);
                Intent intent = new Intent(MainActivity.this,
                        com.fm.mondev.MeanSelection.class);
                intent.putExtras(bundle);
                startActivity(intent);

[EDIT] Я понял, что проблема не полностью связана с путем к классам, хотя в настоящее время у меня есть MeanSelection.class вместо com.fm.mondev.MeanSelection.class. На самом деле проблема, похоже, связана с комплектом. Он работает, когда я использую его между действиями входа и основного, но не для действий, следующих за основным. Я также пробовал альтернативный подход, показанный ниже. Я соответствующим образом отредактировал последующие действия.

                Intent intent = new Intent(MainActivity.this,
                        MeanSelection.class);
                intent.putExtra("email", userEmail);
                startActivity(intent);

Я просмотрел свой логарифм, но ничего полезного не обнаружил. Я знаю, что это работает, если я прокомментирую строку putExtra(s).

[ОТВЕТ] Просмотрев каждую строку ошибок logcat и прочитав ваши ответы, я понял, что возникла проблема с одной из переменных, записанных через Log.d. Итак, решение состояло в том, чтобы стереть эти строки, поскольку они были там только для проверки того, правильно ли были выбраны переменные из предыдущих действий через пакет. Мой вывод: с этого момента я не буду регистрировать строки, переданные от одного действия к другому. Я не уверен, действительно ли это проблема с Android или просто одна из тех вещей, которые не имеют подходящего объяснения, что мы все так хорошо знаем, но как только я стер эти строки, мое приложение заработало.


person Cath    schedule 14.05.2012    source источник
comment
Что именно не работает? Вы можете запускать действия из разных пакетов в своем приложении.   -  person azertiti    schedule 14.05.2012
comment
Приложение аварийно завершает работу, когда оно должно открыть второе действие. Следующая ошибка заставляет меня поверить, что это связано с путем: E/AndroidRuntime(7115): java.lang.RuntimeException: невозможно запустить активность ComponentInfo{com.fm/com.fm.mondev.MeanSelection}: java.lang .NullPointerException: println требуется сообщение   -  person Cath    schedule 14.05.2012
comment
Кажется, этой ошибки нет в коде, который вы показываете   -  person Diego Torres Milano    schedule 14.05.2012
comment
Опубликовать полный код активности?   -  person D-Dᴙum    schedule 14.05.2012


Ответы (4)


Приложение аварийно завершает работу, когда оно должно открыть второе действие. Следующая ошибка заставляет меня поверить, что это связано с путем: «E/AndroidRuntime (7115): java.lang.RuntimeException: невозможно запустить активность ComponentInfo {com.fm/com.fm.mondev.MeanSelection}: java. lang.NullPointerException: для печати требуется сообщение"

println нуждается в сообщении не имеет ничего общего с активностью. Читайте свой логкэт!

Я получаю эту ошибку, когда пытаюсь Log нулевое значение, т.е.

String foo = emptyBundle.getString("barValue");
Log.d(TAG, foo) // error, Log output functions cannot output null values.
Log.d(TAG, "barValue: " + barValue);  // outputs "barValue: null"

Убедитесь, что все, что вы записываете или System.out.printlning, имеет значение.

person Phix    schedule 14.05.2012

Если вы отправляете только одну строку, вам не нужно использовать Bundle.

Intent intent = new Intent(MainActivity.this, com.fm.mondev.MeanSelection.class);
intent.putExtra("com.fm.MainActivity.userEmail", userEmail);
startActivity(intent);

Должен работать нормально. Я действительно не знаю, решит ли это вашу проблему, потому что вы никогда не указывали, что такое сообщение об ошибке.

person Ancantus    schedule 14.05.2012
comment
При непосредственном размещении дополнительных данных в намерении ключ должен быть полным именем (с префиксом пакета). Пакеты не подчиняются этому правилу. - person Phix; 14.05.2012
comment
@Phix From Intent.putExtras() документация: ключи должны включать префикс пакета, например, приложение com.android.contacts будет использовать такие имена, как com.android.contacts.ShowAll. - person Sergey Glotov; 14.05.2012
comment
@Сергей Так это и сказано. Я отредактирую свой ответ выше. Сегодня узнал кое-что новое. - person Ancantus; 14.05.2012
comment
@Ancantus Я имею в виду, что Bundle тоже должен придерживаться этого правила. - person Sergey Glotov; 14.05.2012
comment
@SergeyGlotov, я тоже это слышал, но не вижу резервной копии документации. Может быть излишним, если это не требуется/рекомендуется. - person Phix; 15.05.2012

В соответствии с исключением, которое вы получаете E/AndroidRuntime(7115): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.fm/com.fm.mondev.MeanSelection}: java.lang.NullPointerException: println needs a message, вы получаете NPE в каком-то коде ведения журнала в своей деятельности com.fm.mondev.MeanSelection.

Например, проверьте это: NullPointerException: println требуется сообщение в android

person Vit Khudenko    schedule 14.05.2012

на самом деле вы получаете сообщение об ошибке: java.lang.NullPointerException: println нуждается в сообщении

Я думаю, что вы передаете что-то нулевое в метод println

person Chintan Raghwani    schedule 14.05.2012