【问题标题】:App keeps crashing (Android official tutorial)App老是闪退(安卓官方教程)
【发布时间】:2017-11-05 17:57:15
【问题描述】:

我正在使用官方的 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.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)

【问题讨论】:

    标签: android


    【解决方案1】:

    您复制的 Logcat 错误与您的应用程序无关。 您可以在 Android Studio 中使用 Logcat 过滤器来查找应用程序崩溃的实际原因。至少有两种变体适合您:

    1. 在 Logcat 面板上选择“仅显示选定的应用程序”过滤器
    2. 在 Logcat 面板上的搜索框中输入“FATAL”关键字

    PS:很可能您忘记在 AndroidManifest.xml 文件中注册一项活动(或两项)

    PPS(针对其他评论者):带有新 Gradle 插件的 Android Studio 3.0 不再需要转换 findViewById 的结果。升级并享受!

    【讨论】:

    • Re: PPS:它不是 Studio 或 Gradle 插件;它正在编译 SDK 26,以感谢更改 findViewById() 签名。
    • @laalto 你是对的,findViewById 现在有一个通用签名。我相信这是某种“编译器糖”。谢谢指点。
    • 嘿,所以我应用了 Logcat 过滤器,结果就是这样(在我上面的问题中),但我仍然不知道该怎么做 -.-
    • @z3nox 你走对了。如果您查看更新后的 Logcat 输出,您会发现错误是一系列异常 - “Caused by ... Caused by .. Caused by ...”。因此,您需要最新的:“ActivityNotFoundException: Unable to find explicit Activity class {example.myfirstapp/example.myfirstapp.DisplayMessageActivity};您是否在 AndroidManifest.xml 中声明了此活动?”。如上所述,您需要在 AndroidManifest 中声明 DisplayMessageActivity。
    【解决方案2】:

    试试这个并检查你是否在清单中添加了这两个活动。

    TextView textView = (TextView)findViewById(R.id.textView);......在DisplayMessageActivity中修改这个。

    public static final String EXTRA_MESSAGE = "MESSAGE";......在MainActivity中修改这个。

    【讨论】:

      【解决方案3】:

      在“public void sendMessage(View view)”部分,您可以删除不需要的 View 参数。

      所以它可以像这样“public void sendMessage()”

      另外,在显示消息活动中,“TextView textView = findViewById(R.id.textView);”在这里他需要添加演员表,所以看起来像这样:

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

      在此之后应该可以正常工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-06-22
        • 2018-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-03
        • 2018-11-29
        相关资源
        最近更新 更多