【问题标题】:Unable to start activity ComponentInfo - change to setContentView()无法启动活动 ComponentInfo - 更改为 setContentView()
【发布时间】:2016-03-22 10:09:30
【问题描述】:

我收到了一个相当普遍的错误,我认为这是非常不寻常的事情。我正在使用名为Android Programming for Beginners 的引导程序学习 Android Studio,我来到了一个部分,首先向我展示了如何使用内置模拟器在我的 PC 上设置虚拟实例(下载 intel HAXM 以创建平板电脑应用程序),然后创建一个新布局,为布局命名并更改以下代码,这样当我在虚拟设备上运行应用程序时,新布局将成为打开屏幕:

setContentView(R.layout.main_Activity);

需要注意的几点:

  • 我有一个 Galaxy S3,我用它作为模拟器来运行我的应用程序 并且到目前为止一直运行良好。
  • 我的 CPU 是 Intel i5-4650,显然不支持 从 SDK 管理器安装的可视化添加,我试图 从英特尔网站安装它,它说我的 CPU 不会 支持(我不认为这是这里的问题,但我才开始 安装/卸载此更新后出现问题)我有 创建了一个具有新布局的项目并重新指向了 setContentView 在之前的章节中,这个布局已经奏效了。
  • 我已完全重新安装了 Android Manager,但它未能 使固定。任何人都可以查看这本书是否已过时以实现我想要的 还是我完全看错了。
  • 我还在一个虚拟服务器上设置了 Genymotion,到目前为止它运行良好。
  • 我无法让 android build in 模拟器在任何设备上运行。
  • 我在笔记本电脑上安装了 Android 管理器,我已经设置了 GIT 来链接我的工作,而且这个问题似乎也发生在笔记本电脑上。这是一台旧笔记本电脑,几乎可以肯定不支持可视化。

当我尝试在任何虚拟设备、我的 S3 或 Genymotion 服务器上运行应用程序时,我收到以下错误。我试图从头开始重新创建一个新项目以强制它工作,它会工作一次然后停止。

我正在运行应用程序的设备会说“系统 UI 没有响应”,并且 Android 管理器中会出现以下错误。

我已经发布了我认为需要的内容,但我可以添加任何其他需要的内容。我觉得这个问题的解决方案真的很愚蠢,我要么错过了,要么这本书有点过时了(因为这些事情进展得很快)。我也觉得可视化不是问题,除非某处缓存了一些东西。

谢谢你的高级。

错误代码

03-21 21:51:58.009 28871-28871/com.packtpub.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.packtpub.myapplication/com.packtpub.myapplication.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
at android.app.ActivityThread.access$600(ActivityThread.java:130)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4745)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.packtpub.myapplication.MainActivity.onCreate(MainActivity.java:22)
at android.app.Activity.performCreate(Activity.java:5008)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084) 
at android.app.ActivityThread.access$600(ActivityThread.java:130) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:4745) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:511) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 

这里是 activity_main.java 代码 - 我创建了一个名为 adc 的布局并将该行更改为 setContentView(R.layout.adc);

package com.packtpub.myapplication;

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.adc);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

activity_Main.xml 代码

<?xml version="1.0" encoding="utf-8"?>
<android.support.design.widget.CoordinatorLayout 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:fitsSystemWindows="true"
    tools:context="com.packtpub.myapplication.MainActivity">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

    </android.support.design.widget.AppBarLayout>

    <include layout="@layout/content_main" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

content_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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.packtpub.myapplication.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

adc.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:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.packtpub.myapplication.MainActivity"
    tools:showIn="@layout/activity_main">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

【问题讨论】:

    标签: java android xml android-layout


    【解决方案1】:

    然后将activity_Main.xml 名称更新为acitivity_main 改变

     setContentView(R.layout.adc);
    
    to this
    
     setContentView(R.layout.activity_main);
    

    【讨论】:

    • 是的,如果我希望在启动应用程序时启动 activity_main.xml,我希望在启动应用程序时启动 adc.xml,这将起作用。
    • 你的工具栏存在于activity_main而不是adc
    • 对不起,我不明白这是什么意思。我目前正在学习 android studio,我得到的错误是我无法破译并且觉得我不应该得到错误的错误。你能解释一下你的意思吗?你能突出显示哪些代码需要更改吗?谢谢
    • 您正在使用此行获取工具栏 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);在此行之前,您使用布局 adc 并且您的工具栏不在 adc 中,它在 activity_main 所以当您尝试从 adc 获取工具栏时,您会得到 null 这就是为什么您收到错误 NullPointerException
    • 明白了,好的,我会试一试并报告。那么这是否意味着我需要将“android.support.v7.widget.Toolbar android:id="@+id/toolbar" 添加到 adc.xml 中?
    【解决方案2】:

    错误是因为您将内容视图设置为R.layout.adc,其中不包含ToolBarFloatingActionButton,因此您的应用程序将在以下几行崩溃

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
    

    将它们包含在您的 adc 布局中,它应该可以正常工作,或者如果您不需要上述视图,请从 MainActivity.java 类中删除以下代码

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
    
            FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                            .setAction("Action", null).show();
                }
            });
    

    【讨论】:

    • 太好了,我试试看。这需要添加到我想在启动时显示的任何 .xml 布局中,还是需要添加到我的包中包含的所有 .xml 布局中?再次感谢。
    • 太棒了,谢谢你的帮助。我能够删除代码并将信息移植到正确的 xml 文件中。再次感谢。
    猜你喜欢
    • 2012-11-23
    • 1970-01-01
    • 2013-11-14
    • 2014-05-12
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多