Приложение продолжает падать (официальное руководство для Android)

avatar
z3nox
5 ноября 2017 в 17:57
2537
3
0

Я использую официальные руководства по Android Studio. И хотя мой код и все остальное, как учит меня учебник, мое приложение продолжает падать, как только я нажимаю «Отправить». (https://developer.android.com/training/basics/firstapp/starting-activity.html | вот где я нахожусь).

Это мой код для основного действия:

package example.myfirstapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
    public static final String EXTRA_MESSAGE = "com.example.myfirstapp.MESSAGE";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    /** Called when the user taps the Send button */
    public void sendMessage(View view) {
        Intent intent = new Intent(this, DisplayMessageActivity.class);
        EditText editText = (EditText) findViewById(R.id.editText);
        String message = editText.getText().toString();
        intent.putExtra(EXTRA_MESSAGE, message);
        startActivity(intent);
    }
}

А это мой код для активности отображения сообщений

package example.myfirstapp;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.TextView;

public class DisplayMessageActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_display_message);

        // Get the Intent that started this activity and extract the string
        Intent intent = getIntent();
        String message = intent.getStringExtra(MainActivity.EXTRA_MESSAGE);

        // Capture the layout's TextView and set the string as its text
        TextView textView = findViewById(R.id.textView);
        textView.setText(message);
    }

И это то, что Logcat считает неправильным

11-05 12:36:51.627 2265-2265/com.google.android.googlequicksearchbox:search E/SearchServiceStarter: Задача 174 не выполнена или истекло время ожидания. Клиент 9963085251046432 отключение от SearchService! java.util.concurrent.CancellationException: задача отменена. на com.google.common.util.concurrent.d.da(SourceFile:80) на com.google.common.util.concurrent.d.get(SourceFile:62) на com.google.common.util.concurrent.cf.o(SourceFile:2) на com.google.common.util.concurrent.ax.m (SourceFile: 50) на com.google.common.util.concurrent.az.run(SourceFile:5) в com.google.android.apps.gsa.shared.util.concurrent.a.bf.run(SourceFile:2) в android.os.Handler.handleCallback(Handler.java:790) в android.os.Handler.dispatchMessage(Handler.java:99) на android.os.Looper.loop(Looper.java:164) в android.app.ActivityThread.main(ActivityThread.java:6494) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Вот что сейчас говорит Logcat

11-07 12:24:47.927 4134-4134/example.myfirstapp E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: главная Процесс: example.myfirstapp, PID: 4134 java.lang.IllegalStateException: не удалось выполнить метод для Android: onClick в android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) в android.view.View.performClick(View.java:6294) в android.view.View$PerformClick.run(View.java:24770) в android.os.Handler.handleCallback(Handler.java:790) в android.os.Handler.dispatchMessage(Handler.java:99) на android.os.Looper.loop(Looper.java:164) в android.app.ActivityThread.main(ActivityThread.java:6494) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Вызвано: java.lang.reflect.InvocationTargetException в java.lang.reflect.Method.invoke (собственный метод) в android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) в android.view.View.performClick(View.java:6294) в android.view.View$PerformClick.run(View.java:24770) в android.os.Handler.handleCallback(Handler.java:790) в android.os.Handler.dispatchMessage(Handler.java:99) на android.os.Looper.loop(Looper.java:164) в android.app.ActivityThread.main(ActivityThread.java:6494) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807) Вызвано: android.content.ActivityNotFoundException: невозможно найти явный класс активности {example.myfirstapp/example.myfirstapp.DisplayMessageActivity}; имеют вы объявили об этой активности в своем AndroidManifest.xml? в android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1933) в android.app.Instrumentation.execStartActivity(Instrumentation.java:1616) в android.app.Activity.startActivityForResult(Activity.java:4488) в android.support.v4.app.BaseFragmentActivityApi16.startActivityForResult(BaseFragmentActivityApi16.java:54) в android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:67) в android.app.Activity.startActivityForResult(Activity.java:4446) в android.support.v4.app.FragmentActivity.startActivityForResult(FragmentActivity.java:720) в android.app.Activity.startActivity(Activity.java:4807) в android.app.Activity.startActivity(Activity.java:4775) в example.myfirstapp.MainActivity.sendMessage(MainActivity.java:22) в java.lang.reflect.Method.invoke (собственный метод) в android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) в android.view.View.performClick(View.java:6294) в android.view.View$PerformClick.run(View.java:24770) в android.os.Handler.handleCallback(Handler.java:790) в android.os.Handler.dispatchMessage(Handler.java:99) на android.os.Looper.loop(Looper.java:164) в android.app.ActivityThread.main(ActivityThread.java:6494) в java.lang.reflect.Method.invoke (собственный метод) в com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) на com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

Источник

Ответы (3)

avatar
Sergey Krivenkov
5 ноября 2017 в 19:46
0

Скопированная вами ошибка Logcat не связана с вашим приложением. Вы можете использовать фильтры Logcat в Android Studio, чтобы найти реальную причину сбоя приложения. Для вас есть как минимум два варианта:

  1. Выберите фильтр «Показать только выбранное приложение» на панели Logcat
  2. Введите ключевое слово "FATAL" в поле поиска на панели Logcat

PS: скорее всего, вы забыли зарегистрировать одно из действий (или оба) в файле AndroidManifest.xml

PPS (для других комментаторов): Android Studio 3.0 с новым плагином Gradle больше не требует приведения результата findViewById. Обновите и наслаждайтесь!

laalto
5 ноября 2017 в 20:27
0

Re: PPS: это не плагин Studio или Gradle; это скомпилировать SDK 26, чтобы поблагодарить за измененную подпись findViewById().

Sergey Krivenkov
5 ноября 2017 в 20:34
0

@laalto вы правы, теперь у findViewById есть общая подпись. Я полагал, что это своего рода "компиляторный сахар". Спасибо за указание.

z3nox
7 ноября 2017 в 17:36
0

эй, поэтому я применил фильтр Logcat, и вот что получилось (в моем вопросе выше), но я все еще не понимаю, что делать -.-

Sergey Krivenkov
10 ноября 2017 в 20:35
0

@z3nox ты на правильном пути. Если вы посмотрите на обновленный вывод Logcat, вы обнаружите, что ошибка представляет собой последовательность исключений: «Вызвано... вызвано... вызвано... вызвано...». Поэтому вам нужна последняя версия: «ActivityNotFoundException: невозможно найти явный класс активности {example.myfirstapp/example.myfirstapp.DisplayMessageActivity}; вы объявили эту активность в своем AndroidManifest.xml?». Как упоминалось выше, вам необходимо объявить DisplayMessageActivity в вашем файле AndroidManifest.

avatar
Armin Suljovikj
5 ноября 2017 в 19:45
-1

В части "public void sendMessage(View view)" вы можете удалить аргумент View, так как он вам не нужен.

Так что это может быть примерно так: "public void sendMessage()"

Кроме того, в действии отображаемого сообщения "TextView textView = findViewById(R.id.textView);" здесь ему нужно добавить приведение, чтобы это выглядело так:

"TextView textView = (TextView) findViewById(R.id.textView);"

После этого должно работать нормально.

avatar
AYUSH ARYA
5 ноября 2017 в 18:53
-1

Попробуйте это, а также проверьте, добавили ли вы оба действия в манифест или нет.

TextView textView = (TextView)findViewById(R.id.textView);...... измените это в DisplayMessageActivity.

public static final String EXTRA_MESSAGE = "MESSAGE";...... измените это в MainActivity.