Java.Lang.RuntimeException を解決: アクティビティ ComponentInfo をインスタンス化できません
今日は、アクティビティ ComponentInfo をインスタンス化できません
という別の 実行時例外 について学習します。
java.lang.RuntimeException: アクティビティ ComponentInfo をインスタンス化できません
が発生するさまざまな理由を探ります。 最後に、それを根絶するための解決策があります。
java.lang.RuntimeException: アクティビティ ComponentInfo をインスタンス化できません
エラーを解決する
エラー デモンストレーションのコード例 (MainActivity.java
ファイル):
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// write your remaining code here
}
コード例 (AndroidManifest.xml
ファイル):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.App"
tools:targetApi="31">
<activity
android:name="MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Android エミュレーターでアプリケーションを起動しているときにこれを実行しようとすると、java.lang.RuntimeException: アクティビティ ComponentInfo をインスタンス化できません
というエラーが表示されます。
これを解決するために考慮しなければならない原因がいくつか考えられます。 それらのすべてを以下にリストします。
-
Activity
がAndroidManifest.xml
ファイルに追加されていることを確認します。 なぜそれが必要なのですか?これは、新しい
Activity
を作成するたびに、AndroidManifest.xml
ファイルに登録する必要があるためです。 また、すべてのアクセス修飾子を確認してください。 -
onCreate()
の前に表示しようとしたときにもこのエラーが発生しますが、これは正しくなく、アクティビティ コンポーネント情報をインスタンス化できないというエラーが発生します。 -
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo
が発生するもう 1つの理由は、abstract
として宣言されているAndroidManifest.xml
にActivity
を追加したことです。 つまり、アクセスしようとしているActivity
はabstract
と宣言されていると言えます。 -
アクティビティ パスの前にあるドットが欠落していないことを確認してください (これにより、上記のコード例でエラーが発生しています)。
-
MainActivity.java
ファイルをpublic
として宣言しなかった場合にも、このエラーに直面する必要があります。 また、ファイルが正しいパッケージにあるかどうかを確認してください。
これで、考えられるすべての理由がわかりました。 どうすれば修正できますか?
次の解決策を参照してください。
ソリューションのコード例 (MainActivity.java
ファイル):
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
// write your remaining code here
}
コード例 (AndroidManifest.xml
ファイル):
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.app">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.App"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
アクティビティ パスの前にドットを追加しました。 また、MainActivity.java
ファイルが public
として宣言されていること、および abstract
として宣言されている Activity
にアクセスしようとしていないことも確認します。
原因として挙げられているすべての点に注意してください。これらの点は、考えれば実際の解決策です。