Java.lang.RuntimeException: 无法启动组件信息的活动

21

我知道这个错误已经在论坛上出现了无数次,但请帮助我找到我错过的地方。我正在尝试做一个简单的选项卡应用程序,除了错误之外,我没有太多东西。

1)我的主要活动是基于我找到的选项卡布局教程。

public class MainTabPanel extends TabActivity {

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mainlayout);
        Resources res = getResources();
        TabHost tabHost = getTabHost();
        TabHost.TabSpec spec;
        Intent intent;
        intent = new Intent().setClass(this, MyBookActivity.class);
        spec = tabHost.newTabSpec("main")
                .setIndicator("Main", res.getDrawable(R.drawable.ic_mybook))
                .setContent(intent);
        tabHost.addTab(spec);
        tabHost.setCurrentTab(0);
    }

}

2)mainlayout.xml


<?xml version="1.0" encoding="utf-8"?>
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
 android:id="@android:id/tabhost"
 android:layout_width="fill_parent"
 android:layout_height="fill_parent">
 <LinearLayout  
   android:orientation="vertical"  
   android:layout_width="fill_parent"     
   android:layout_height="fill_parent"        
   android:padding="5dp">
 <TabWidget 
  android:id="@android:id/tabs" 
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" />        

  <FrameLayout      
  android:id="@android:id/tabcontent" 
  android:layout_width="fill_parent"   
  android:layout_height="fill_parent"
  android:padding="5dp" />   
 </LinearLayout></TabHost>

3) 我的第二个活动基本上几乎是空的,只显示当前日期和时间,在我尝试添加选项卡面板之前工作正常。

4) 我的清单文件。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.th.mybook"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainTabPanel"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="MyBookActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.ALTERNATIVE" />
            </intent-filter>
        </activity>
    </application>
</manifest>

5个Log Cat错误

02-10 21:04:45.203: E/AndroidRuntime(1107): FATAL EXCEPTION: main
02-10 21:04:45.203: E/AndroidRuntime(1107): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.th.mybook/org.th.mybook.MainTabPanel}: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.th.mybook/org.th.mybook.MyBookActivity}: java.lang.NullPointerException
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.os.Handler.dispatchMessage(Handler.java:99)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.os.Looper.loop(Looper.java:123)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.main(ActivityThread.java:4627)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at java.lang.reflect.Method.invokeNative(Native Method)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at java.lang.reflect.Method.invoke(Method.java:521)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at dalvik.system.NativeStart.main(Native Method)
02-10 21:04:45.203: E/AndroidRuntime(1107): Caused by: java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{org.th.mybook/org.th.mybook.MyBookActivity}: java.lang.NullPointerException
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2585)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.startActivityNow(ActivityThread.java:2503)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.LocalActivityManager.moveToState(LocalActivityManager.java:127)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.LocalActivityManager.startActivity(LocalActivityManager.java:339)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.widget.TabHost$IntentContentStrategy.getContentView(TabHost.java:651)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.widget.TabHost.setCurrentTab(TabHost.java:323)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.widget.TabHost.addTab(TabHost.java:213)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at org.th.mybook.MainTabPanel.onCreate(MainTabPanel.java:30)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
02-10 21:04:45.203: E/AndroidRuntime(1107):     ... 11 more
02-10 21:04:45.203: E/AndroidRuntime(1107): Caused by: java.lang.NullPointerException
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:100)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at org.th.mybook.MyBookActivity.<init>(MyBookActivity.java:16)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at java.lang.Class.newInstanceImpl(Native Method)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at java.lang.Class.newInstance(Class.java:1429)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
02-10 21:04:45.203: E/AndroidRuntime(1107):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2577)
02-10 21:04:45.203: E/AndroidRuntime(1107):     ... 20 more

请帮助我,告诉我我错过了什么,我正在将这段代码与我的旧代码进行比较,但找不到任何问题。 谢谢。

6) 我的书籍活动

public class MyBookActivity extends Activity {
    java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext()); 

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        DigitalClock clock = (DigitalClock) findViewById(R.id.digitalClock1);
        final TextView date = (TextView) findViewById(R.id.textView1);
        date.setText(dateFormat.format(new Date()));
        TextWatcher watcher = new TextWatcher() {

            @Override
            public void afterTextChanged(Editable s) {
            }

            @Override
            public void beforeTextChanged(CharSequence s, int start, int count,
                    int after) {
            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before,
                    int count) {

                if (s.toString().startsWith("00:00:00")
                        || s.toString().startsWith("12:00:00")) {
                    date.setText(dateFormat.format(new Date()));
                }
            }
        };
        clock.addTextChangedListener(watcher);

    }
}

7)main.xml布局 -> 用于我的书籍活动

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:gravity="right"
    android:orientation="horizontal" >


    <LinearLayout
        android:id="@+id/DatePanel1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" >


        <TextView
            android:id="@+id/textView1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="@dimen/space"
            android:layout_weight="1"
            android:text="TextView" />

        <DigitalClock
            android:id="@+id/digitalClock1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="DigitalClock" />
    </LinearLayout>

</LinearLayout>

1
是的,请发布“MyBookActivity”的代码,如果您还没有实现它,请实现它,这将解决您的问题。 - Mayank
你确定图标“ic_mybook”在你的drawable文件夹里吗? - Peter
就像我之前所说的,我没有在这里添加任何内容,因为在添加选项卡之前它是可以工作的,但现在我已经发布了代码和布局文件。 - user902383
我在使用proguard添加admob后遇到了同样的问题,但是我确定如果通过设置minifyEnabled=false来禁用proguard,一切都能正常工作。不知道发生了什么。 - Alston
@曹博堯 你的堆栈跟踪里都有什么信息?你的代码看起来怎么样呢? - user902383
显示剩余3条评论
12个回答

15
    <activity
        android:name="MyBookActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.ALTERNATIVE" />
        </intent-filter>
    </activity>

你的MyBookActivity之前,缺少了一个点号(.)吗?


2
我会检查一下,但我不认为那是问题。我在一个正常工作的例子中进行了检查,点号只出现在主活动之前。 - user902383

10

这是我的愚蠢行为:

java.text.DateFormat dateFormat = android.text.format.DateFormat.getDateFormat(getApplicationContext());

将此放置在onCreate()方法内解决了我的问题。


你能看一下这个问题吗?https://stackoverflow.com/q/70657462/10991969 - user10991969

9

我曾经遇到过同样的问题,清理并重新构建项目后问题得以解决。


5
我最近在检查 Android Vitals 时,在我的应用程序中遇到了类似的错误,因此我写下了这篇文章。
这就是错误信息。
java.lang.RuntimeException: Unable to start activity ComponentInfo{my.package.name/my.package.name.activity.MainActivity}: android.view.InflateException: Binary XML file line #30: Binary XML file line #30: Error inflating class fragment

在检查了我的二进制XML文件的第30行后,我发现我的navGraph位于第30行。 app:navGraph="@navigation/mobile_navigation" 然后,我意识到我错误地填充了片段。
我遇到了使用导航组件入门,其中明确说明:
当使用FragmentContainerView创建NavHostFragment或者手动通过FragmentTransaction将NavHostFragment添加到您的Activity中时,尝试在Activity的onCreate()中通过Navigation.findNavController(Activity, @IdRes int)检索NavController将会失败。您应该直接从NavHostFragment中检索NavController。
这是正确的Inflating NavHostFragment的方法:
NavHostFragment navHostFragment =
        (NavHostFragment) supportFragmentManager.findFragmentById(R.id.nav_host_fragment);
NavController navController = navHostFragment.getNavController();

之前,我尝试像这样膨胀:

NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);

所以,我的新代码变成了:
NavHostFragment navHostFragment = (NavHostFragment) getSupportFragmentManager().findFragmentById(R.id.nav_host_fragment);
NavController navController = null;
if (navHostFragment != null) {
    navController = navHostFragment.getNavController();
}
if (navController != null) {
    NavigationUI.setupActionBarWithNavController(MainActivity.this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);
}

5

您的Manifest文件必须更改,如下所示:Activity名称必须指定为".YourActivityname"

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.th.mybook"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
     android:minSdkVersion="8" android:targetSdkVersion="8" />

<application
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name" >
    <activity
        android:name=".MainTabPanel"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity
        android:name=".MyBookActivity"  >            
    </activity>
</application>


2

我的问题看起来很相似,经过几个小时的研究,我发现并不是我所有的项目都转换成了androidx,所以我做出了以下更改:

<android.support.constraint.ConstraintLayout

转换为

<androidx.constraintlayout.widget.ConstraintLayout

然后,Android Studio 仍然会出现问题,但是问题解决者可以将 ConstraintLayout 添加到您的库中。

现在它又开始了!有趣的是,在过去的8年中,许多类似的问题出现了不同的解决方案。


1

亲爱的,您在清单文件中使用了两个Intent启动器。请将只将一个Activity设置为启动器: 您清单文件中的Activity是:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.th.mybook"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk android:minSdkVersion="8" />
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" >
        <activity
            android:name=".MainTabPanel"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name="MyBookActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.ALTERNATIVE" />
            </intent-filter>
        </activity>
    </application>
</manifest>

现在编写代码将是(我已将您的“MyActivityBook”设置为默认活动启动器。在清单上复制并粘贴它。)
<?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="org.th.mybook"
        android:versionCode="1"
        android:versionName="1.0" >
        <uses-sdk android:minSdkVersion="8" />
        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:name=".MainTabPanel"
                android:label="@string/app_name" >

            </activity>
            <activity
                android:name="MyBookActivity"
                android:label="@string/app_name" >
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>
    </manifest>

第二个错误可能是如果您复制粘贴旧代码,请更新 com.example.packagename.FILE_NAME

希望这可以解决问题!


1

虽然我们在一个11年的帖子中,但这可能对某些人有用。

我正在学习谷歌的基本Android Kotlin培训,特别是“unscramble”应用程序codelabs,问题就出在那里。

第一张截图上是发生错误的回溯信息。

第二张截图上是来自完全相同的codelab的简单提示,我完全错过了。

事实证明,我的Kotlin源文件中的包语句都缺失了,尽管谷歌自己编写的codelab解决方案代码中也没有。

在源文件开头添加包行后,问题得到了解决。

package com.example.android.unscramble.ui.game

enter image description here

enter image description here


0
尝试了几个答案,发现它们要么与我的项目无关,要么我已经尝试过清理和重建(https://dev59.com/Seo6XIcBkEYKwwoYQiS7#48760966)。但是直接对我没有用。我将其与代码的旧版本进行比较,在其中观察到某些库文件(jars 和 aars 在外部库目录中)已经丢失。尝试无效缓存并重新启动(Invalidata Cache and Restart)可以解决问题,这将创建所有库,并且能够正常工作。

0

如果您正在使用ViewModel并传递任何参数,但未使用ViewModelFacoty来实现此操作...那么可能会出现此问题

解决方案:使用ViewModelFactory在ViewModel类中传递任何参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接