Нажатие кнопок в эмуляторе Android

#java #android

#java #Android

Вопрос:

Недавно я начал программировать для Android, и я столкнулся с проблемой, я не могу заставить нажатие кнопки работать и отправить меня на другой экран. Эмулятор просто вылетает. Я думаю, что это очень простая проблема, но я ничего не могу найти в Интернете, и я не понимаю, почему он выходит из строя. Код для нажатия кнопки:

 public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button directions = (Button)findViewById(R.id.buttonDirections);

        directions.setOnClickListener(new View.OnClickListener() {

                public void onClick(View v) {
                Intent i = new Intent(MainMenu.this, Directions.class);
                MainMenu.this.startActivity(i);

            }
        });
    }

10-25 14:54:45.457: DEBUG/dalvikvm(372): Debugger has detached; object registry had 1 entries
10-25 14:54:54.527: DEBUG/dalvikvm(137): GC_EXTERNAL_ALLOC freed 152K, 51% free 2940K/5959K, external 4643K/5293K, paused 88ms
10-25 14:54:57.887: INFO/ActivityManager(69): Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.ui.app/.MainMenu } from pid 137
10-25 14:54:58.217: INFO/ActivityManager(69): Start proc com.ui.app for activity com.ui.app/.MainMenu: pid=381 uid=10034 gids={}
10-25 14:54:59.497: INFO/ARMAssembler(69): generated scanline__00000177:03515104_00001002_00000000 [ 87 ipp] (110 ins) at [0x445ed6f0:0x445ed8a8] in 951890 ns
10-25 14:55:00.437: INFO/ActivityManager(69): Displayed com.ui.app/.MainMenu:  2s234ms
10-25 14:55:02.660: INFO/ActivityManager(69): Starting: Intent { cmp=com.ui.app/.Directions } from pid 381
10-25 14:55:02.701: DEBUG/AndroidRuntime(381): Shutting down VM
10-25 14:55:02.701: WARN/dalvikvm(381): threadid=1: thread exiting with uncaught exception (group=0x40015560)
10-25 14:55:02.721: ERROR/AndroidRuntime(381): FATAL EXCEPTION: main
10-25 14:55:02.721: ERROR/AndroidRuntime(381): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.ui.app/com.ui.app.Directions}; have you declared this activity in your AndroidManifest.xml?
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.app.Activity.startActivityForResult(Activity.java:2827)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.app.Activity.startActivity(Activity.java:2933)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at com.ui.app.MainMenu$1.onClick(MainMenu.java:22)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.view.View.performClick(View.java:2485)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.view.View$PerformClick.run(View.java:9080)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.os.Handler.handleCallback(Handler.java:587)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.os.Looper.loop(Looper.java:123)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at android.app.ActivityThread.main(ActivityThread.java:3683)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at java.lang.reflect.Method.invokeNative(Native Method)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at java.lang.reflect.Method.invoke(Method.java:507)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-25 14:55:02.721: ERROR/AndroidRuntime(381):     at dalvik.system.NativeStart.main(Native Method)
10-25 14:55:02.740: WARN/ActivityManager(69):   Force finishing activity com.ui.app/.MainMenu
10-25 14:55:03.268: WARN/ActivityManager(69): Activity pause timeout for HistoryRecord{40656c60 com.ui.app/.MainMenu}
10-25 14:55:05.309: INFO/Process(381): Sending signal. PID: 381 SIG: 9
 

Logcat после попытки предложений

 10-25 15:28:44.931: INFO/ActivityManager(69): Starting: Intent { cmp=com.menus.app/.GetDirections } from pid 338
10-25 15:28:44.931: DEBUG/AndroidRuntime(338): Shutting down VM
10-25 15:28:44.939: WARN/dalvikvm(338): threadid=1: thread exiting with uncaught exception (group=0x40015560)
10-25 15:28:44.959: ERROR/AndroidRuntime(338): FATAL EXCEPTION: main
10-25 15:28:44.959: ERROR/AndroidRuntime(338): android.content.ActivityNotFoundException: Unable to find explicit activity class {com.menus.app/com.menus.app.GetDirections}; have you declared this activity in your AndroidManifest.xml?
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1405)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.app.Instrumentation.execStartActivity(Instrumentation.java:1379)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.app.Activity.startActivityForResult(Activity.java:2827)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.app.Activity.startActivity(Activity.java:2933)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at com.menus.app.HomeMenu$1.onClick(HomeMenu.java:22)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.view.View.performClick(View.java:2485)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.view.View$PerformClick.run(View.java:9080)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.os.Handler.handleCallback(Handler.java:587)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.os.Handler.dispatchMessage(Handler.java:92)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.os.Looper.loop(Looper.java:123)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at android.app.ActivityThread.main(ActivityThread.java:3683)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at java.lang.reflect.Method.invokeNative(Native Method)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at java.lang.reflect.Method.invoke(Method.java:507)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
10-25 15:28:44.959: ERROR/AndroidRuntime(338):     at dalvik.system.NativeStart.main(Native Method)
10-25 15:28:44.989: WARN/ActivityManager(69):   Force finishing activity com.menus.app/.HomeMenu
10-25 15:28:45.509: WARN/ActivityManager(69): Activity pause timeout for HistoryRecord{40636730 com.menus.app/.HomeMenu}
10-25 15:28:47.379: INFO/Process(338): Sending signal. PID: 338 SIG: 9
10-25 15:28:47.454: INFO/ActivityManager(69): Process com.menus.app (pid 338) has died.
10-25 15:28:47.454: INFO/WindowManager(69): WIN DEATH: Window{4070afd8 com.menus.app/com.menus.app.HomeMenu paused=false}
10-25 15:28:47.659: WARN/InputManagerService(69): Got RemoteException sending setActive(false) notification to pid 338 uid 10034
10-25 15:28:57.269: WARN/ActivityManager(69): Activity destroy timeout for HistoryRecord{40636730 com.menus.app/.HomeMenu}
10-25 15:29:00.150: WARN/ActivityManager(69): finishReceiver called but no pending broadcasts
 

Я также переделал проект, потому что подумал, что он может конфликтовать с аналогичным именем, поэтому имена разные.

Комментарии:

1. Вы запустили эмулятор с отладчиком? Пожалуйста, опубликуйте сообщение об ошибке, которое выдает вам отладчик.

2. Пожалуйста, опубликуйте вывод error / stacktrace / logcat. Присутствующие здесь люди обязательно решат эту проблему, сообщив о наиболее распространенных проблемах, но вы должны научиться интерпретировать полученную ошибку…

3. Я думаю, вам также нужно будет опубликовать соответствующие фрагменты вашего AndroidManifest.

Ответ №1:

Вероятно, вы не объявили свой класс Directions в манифесте

Добавьте это в файл AndroidManifest.xml

 <activity android:name=".Directions" android:label="Directions" />
 

Комментарии:

1. Проверьте logcat и отправьте сообщение об ошибке, которое вы получаете. Это позволит нам точно отследить, что не так, без необходимости угадывать.

Ответ №2:

Как выглядит трассировка стека (используйте LogCat)? в 99,9% случаев для такого рода проблем трассировка стека даст вам ответ.

На первый взгляд, вы видите исключение nullpointer в MainMenu.this, но трассировка стека скажет вам наверняка.

[Редактировать после обновленной трассировки стека]

Новая трассировка стека указывает на то, что проблема, с которой вы сейчас столкнулись, заключается в том, что Android не может идентифицировать вашу активность Directions.

Проверьте AndroidManifest.xml , как также предположил дымме. Я бы посоветовал попробовать:

 <activity android:name="com.ui.app.Directions" android:label="Directions"></activity>
 

Конечно, убедитесь, что имя пакета для класса Directions указано правильно. Нотация .Directions часто завершается ошибкой, если ваш класс Activity находится где-то нестандартно.

Комментарии:

1. [2011-10-25 15:28:37 — AndroidProject] ActivityManager: Запуск: Намерение { act=android.intent.action. MAIN cat=[android.intent.category. LAUNCHER] cmp = проект. Package/.MainMenu } [2011-10-25 15:28:37 — AndroidProject] ActivityManager: Тип ошибки 3 [2011-10-25 15:28:37 — AndroidProject] ActivityManager: Ошибка: класс активности {проект. Пакет / проект. Пакет. MainMenu} не существует.

2. Вы передаете MainMenu.this как контекст, но MainMenu (предположительно, ваша активность) — это действие, а не контекст приложения.

3. Я бы предложил попытаться передать новое намерение (MainMenu.this.getApplicationContext(), Directions.class ).

4. Это тоже не сработало, я опубликовал сообщения logcat, которые я получил.

5. Кажется, это произошло. Но передача MainMenu.это была только часть проблемы — у вас также есть проблема с тем, что направления не определены. Я обновлю ответ, так как поле для комментариев бесполезно для фрагментов кода. 🙂

Ответ №3:

Возможно, вы забыли включить Directions.class в Android Manifest.xml файл Таким образом, Android не может найти активность.