【问题标题】:My Android app crashes while trying to start a new activity using Intents [duplicate]尝试使用 Intents 启动新活动时,我的 Android 应用程序崩溃 [重复]
【发布时间】:2018-06-25 17:57:06
【问题描述】:

我是 Android 编程新手,我决定构建一个测验应用程序。我构建了布局并想设置一个按钮来启动一个开始测验的新活动。我还在 MainActivity 中正确设置了方法,但是当我运行应用程序并单击按钮时,应用程序崩溃并在 logcat 上留下大量错误消息。

任何帮助将不胜感激。以下是代码。

XML 代码:

<Button
    android:id="@+id/button_view"
    android:layout_width="200dp"
    android:layout_height="60dp"
    android:layout_below="@id/name_view"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:background="@drawable/button_round"
    android:fontFamily="sans-serif-light"
    android:inputType="textCapWords"
    android:text="Go!"
    android:onClick="startQuestionOne"
    android:textSize="24dp" />

主活动

public class LoginActivity extends AppCompatActivity {

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

public void startQuestionOne(View view) {
    Intent myIntent = new Intent(LoginActivity.this, QuestionOneActivity.class);
    startActivity(myIntent);
}
}

Logcat 消息

06-25 18:32:34.259 13705-13705/com.example.android.udacityquizapp E/AndroidRuntime: 致命异常: main 进程:com.example.android.udacityquizapp,PID:13705 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.android.udacityquizapp/com.example.android.udacityquizapp.QuestionOneActivity}:android.view.InflateException:二进制 XML 文件第 23 行:错误膨胀类 null 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2344) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 在 android.app.ActivityThread.access$800(ActivityThread.java:154) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324) 在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5328) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 在 dalvik.system.NativeStart.main(本机方法) 引起:android.view.InflateException:二进制 XML 文件第 23 行:错误膨胀类 null 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:492) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:397) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:353) 在 android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 在 com.example.android.udacityquizapp.QuestionOneActivity.onCreate(QuestionOneActivity.java:11) 在 android.app.Activity.performCreate(Activity.java:5279) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 在 android.app.ActivityThread.access$800(ActivityThread.java:154) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324) 在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5328) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 在 dalvik.system.NativeStart.main(本机方法) 引起:java.lang.NullPointerException 在 android.support.v7.app.AppCompatViewInflater.createView(AppCompatViewInflater.java:99) 在 android.support.v7.app.AppCompatDelegateImplV9.createView(AppCompatDelegateImplV9.java:1035) 在 android.support.v7.app.AppCompatDelegateImplV9.onCreateView(AppCompatDelegateImplV9.java:1092) 在 android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:684) 在 android.view.LayoutInflater.rInflate(LayoutInflater.java:755) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:492) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:397) 在 android.view.LayoutInflater.inflate(LayoutInflater.java:353) 在 android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 在 android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 在 com.example.android.udacityquizapp.QuestionOneActivity.onCreate(QuestionOneActivity.java:11) 在 android.app.Activity.performCreate(Activity.java:5279) 在 android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088) 在 android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2308) 在 android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2396) 在 android.app.ActivityThread.access$800(ActivityThread.java:154) 在 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1324) 在 android.os.Handler.dispatchMessage(Handler.java:110) 在 android.os.Looper.loop(Looper.java:193) 在 android.app.ActivityThread.main(ActivityThread.java:5328) 在 java.lang.reflect.Method.invokeNative(Native Method) 在 java.lang.reflect.Method.invoke(Method.java:515) 在 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 在 dalvik.system.NativeStart.main(本机方法)

这是完整的 XML

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/gradient"
tools:context=".LoginActivity">

<ImageView
    android:id="@+id/udacity_logo"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:src="@drawable/udacity" />

<TextView
    android:id="@+id/textview_text"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@id/udacity_logo"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="20dp"
    android:fontFamily="sans-serif-ligh"
    android:text="Udacity Quiz App"
    android:textColor="#faebd7"
    android:textSize="36dp"
    android:textStyle="bold" />

<EditText
    android:id="@+id/name_view"
    android:layout_width="300dp"
    android:layout_height="40dp"
    android:layout_below="@id/textview_text"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:background="@drawable/edit_round"
    android:drawableLeft="@drawable/ic_action_user"
    android:ems="10"
    android:fontFamily="sans-serif-light"
    android:hint="Name"
    android:inputType="textCapWords"
    android:textColor="#000000"
    android:textColorHint="#000000"
    android:textSize="16dp" />

<Button
    android:id="@+id/button_view"
    android:layout_width="200dp"
    android:layout_height="60dp"
    android:layout_below="@id/name_view"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="30dp"
    android:background="@drawable/button_round"
    android:fontFamily="sans-serif-light"
    android:inputType="textCapWords"
    android:text="Go!"
    android:onClick="startQuestionOne"
    android:textSize="24dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentRight="true"
    android:layout_marginBottom="8dp"
    android:layout_marginRight="8dp"
    android:fontFamily="sans-serif-light"
    android:text="powered by: @William"
    android:textColor="#faebd7" />
</RelativeLayout>

上面是 LoginActivity 的 XML,其中包含一个按钮。单击该按钮时,它应该启动一个名为 QuestionOneActivity 的新活动,但应用程序崩溃了。

登录活动

package com.example.android.udacityquizapp;

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

public class LoginActivity extends AppCompatActivity {

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

public void startQuestionOne(View view) {
    Intent myIntent = new Intent(LoginActivity.this, 
QuestionOneActivity.class);
    startActivity(myIntent);
}
}

【问题讨论】:

  • 该错误表明您的 QuestionOneActivity 的 XML 文件在第 23 行存在问题。如果您对此进行调查但无法弄清楚,发布完整文件(或完整应用程序)将更容易帮忙。从您发布的 RuntimeException 中:“QuestionOneActivity: android.view.InflateException: Binary XML file line #23: Error inflating class null”
  • 信息不足
  • 可能是某项活动的投射问题
  • 我已经编辑了帖子以添加来自 XML 和 Java 的完整代码。
  • @clay_to_n 我在第 23 行添加了一个视图标记。此外,在 XML 布局的右上角,我得到一个渲染错误,无法在没有类属性的情况下膨胀视图标记

标签: java android android-studio android-intent


【解决方案1】:

首先将onCreate()中的Button绑定为

Button b = (Button) findViewById(R.id.button_view);

然后检查您的活动 QuestionOneActivity 是否在清单文件中声明 之后检查 QuestionOneActivity 活动 xml 文件是否有错误...

【讨论】:

    【解决方案2】:

    感谢clay_to_n,根据您的建议,我发现我的视图标签使用了小写的“v”。当我调整它时,应用程序按预期运行。

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多