java.lang.RuntimeException:アクティビティComponentInfoをインスタンス化できません


151

サンプルコードを実行しようとしていましたが、Android 1.5エミュレータでアプリケーションを起動しているときに、次のエラーが発生しました。

LogCatからのエラー:

01-13 02:28:08.392: ERROR/AndroidRuntime(2888): FATAL EXCEPTION: main
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.s.android.test/com.s.android.test.MainActivity}: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1544)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1638)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.access$1500(ActivityThread.java:117)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:928)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Handler.dispatchMessage(Handler.java:99)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.os.Looper.loop(Looper.java:123)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.main(ActivityThread.java:3647)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invokeNative(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.reflect.Method.invoke(Method.java:507)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.NativeStart.main(Native Method)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888): Caused by: java.lang.ClassNotFoundException: com.s.android.test.MainActivity in loader dalvik.system.PathClassLoader[/data/app/com.s.android.test-2.apk]
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at dalvik.system.PathClassLoader.findClass(PathClassLoader.java:240)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:551)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.Instrumentation.newActivity(Instrumentation.java:1021)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1536)
01-13 02:28:08.392: ERROR/AndroidRuntime(2888):     ... 11 more
01-13 02:28:08.407: WARN/ActivityManager(112):   Force finishing activity com.s.android.test/.MainActivity

編集 このエラーは、ほとんどの初心者に起こります。マニフェストファイルにすべてのアクティビティを追加する必要があるということです。


ダンブレスラウに感謝します。
rahul、2014年

1
申し訳ありませんが、みんな...申し訳ありません、あなたのtime..Iだけのマニフェストファイルに新しいクラスを追加するのを忘れ消耗(waisting)のための...
ラーフル

1
すべてのツール(EclipseとSDKマネージャー)を更新して修正し、Androidサポートライブラリをプロジェクトに追加
Hayden Thring

私はこの問題を抱えています。このstackoverflow.com/questions/30473270/…を
DanialAbdi

回答:


137

それはあなたの意図の問題です。

にを追加Activityしてください AndroidManifest.xml

新しいアクティビティを作成する場合は、に登録する必要がありますAndroidManifest.xml


4
アクティビティを拡張せず、いくつかの一般的な機能を含むクラスがあります。しかし、私はまだこの例外を受け取ります。どうして?
Manoj Kumar 2012

私のプロジェクトでは、xmlファイルのandroid:nameを見ると、クラスがパブリックではないと表示されています。メインアクティビティでクラスの前にパブリックを追加すると、アプリは問題なく実行されます。変だ。
Codebeat

私はクリーン+再構築..それを解決した私のため..私が開発していたことをネイティブアプリでこの問題を持っていた..私はActivityクラス内の別のメソッドを追加し、私はこのエラーを取得開始
ashishsony

6
別のオプションは、あなたの活動がマニフェストに含まれていることですが、それは次のように宣言されていますabstract(リファクタリング中に間違いを犯したため、エラーメッセージはあまり役に立ちません)。
チェコ語2016

59

onCreate()正しくないビューを見つけようとしている可能性があります。

public class MainActivity extends Activity {

  ImageView mainImage = (ImageView) findViewById(R.id.imageViewMain); //incorrect

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

2
うーん、ありがとう。あなたは命の恩人です。ばかげていますが、どうもありがとうございました。それは今一週間私を悩ませていました。
15年

同じ間違いをしていた;)
Sumit Jha '19

ここでも同じ間違い。ありがとう
プージャ

53

java.lang.RuntimeExceptionを取得する別の方法があります。アクティビティComponentInfo例外をインスタンス化できません。これは、開始しようとしているアクティビティがabstractであることです。私はこの愚かな間違いを一度犯しましたが、見落とすのはとても簡単です。


13
また、アクティビティは公開されている必要があります(これは私の間違いでした)。
djjeck 2012年

2年後にお手数をおかけして申し訳ありませんが、なぜ抽象的なアクティビティを開始できないのでしょうか。
BenjaminFranklin

2
@BenjaminFranklin抽象クラスは、それが完全ではなく、欠落していることを意味します。キーワードの抽象をクラスにプレフィックスすることは、それを直接インスタンス化できないことを意味します。継承を通じてのみ、および抽象クラスの欠けている機能を実装する他のクラスのみです。
キット

私はすでに抽象クラスを継承していますが、それでも機能しません。さらに説明していただけますか?
Mohammedsalim Shivani

53

私の場合、Googleマップライブラリを追加するのを忘れました

<application>
    ....

    <uses-library android:name="com.google.android.maps" />
</application>

また、アクティビティパスの前にある前のドットが欠落していないことを確認してください

<activity android:name=".activities.MainActivity"/>

2
ありがとう、@ Maragues !! 同じ問題でした!あなたは私の問題を解決しました。:)
cmcromance 2012年

27

画像

また、この問題が原因で発生します。apkにエクスポートする必要があるjarのチェックを外したところ、同じことが起こりました。アプリの実行に必要なjarにチェックマークを付けてください。


この問題を確認し、各依存関係コンポーネントを正しく試すことが重要です。たとえば、Android Studio(またはIntellij IDEA)では、依存関係の正しいスコープ(Provided、Compileなど)を選択します。私の場合、[提供]を[コンパイル]に変更すると、正常に動作します。
dayanruben、2015年

15

私もこの問題に遭遇しましたが、少し異なります。これが私のシナリオです:

アプリの詳細:

  • ライブラリとしてのActionBarSherlockの使用
  • ActionBarSherlockライブラリでandroid-support-v4-r7-googlemaps.jarを使用して、プライマリプロジェクトで「マップフラグメント」を使用できるようにしました
  • jarをプライマリプロジェクトのビルドパスに追加しました
  • <uses-library android:name="com.google.android.maps" />ライブラリプロジェクトと私の主なプロジェクトの両方のマニフェストにが含まれています(これはライブラリでは必要ない場合がありますか?)
  • プライマリプロジェクトのマニフェストには、適切なアクティビティ定義と適切なプロパティがすべて含まれていました
  • この問題に関する抽象的なアクティビティやStack Overflowで見た他の問題はありませんでした。

しかし、元の投稿で説明されているエラーがまだ発生し、それを解消することができませんでした。ただし、問題は1つの点で少し異なりました。

  • デバイスへのアプリケーションの新規インストールにのみ影響しました。アプリを初めてインストールしたときはいつでも、次のいくつかの「警告」に続いてエラーが発生します。FragmentActivityのスーパークラスを解決できません
  • これらの警告は、ActionBarSherlockライブラリまでさかのぼります。
  • アプリは強制終了してクラッシュします。
  • アプリをすぐに再構築して再デプロイした場合、問題なく動作しました。
  • クラッシュしたのは、まったく新しいインストール時だけでした。アプリをアンインストールし、Eclipseから再度ビルドおよびデプロイすると、クラッシュします。2回目にビルド/デプロイすると、問題なく動作します。

修正方法:

  • ActionBarSherlockライブラリプロジェクトで、ビルドパスにandroid-support-v4-r7-googlemaps.jarを追加しました
  • この手順だけでは問題は解決しませんでした

  • jarがビルドパスに追加されたら、Javaの[ビルドパス]> [順序とエクスポート]タブで順序を変更しました。JARをリストの最初の項目に設定しました(/ srcおよび/ gen項目の後の最後です) )。

  • 次に、アプリを再構築してデバイスに再デプロイしました-新規インストールで期待どおりに機能しました。念のため、もう一度2〜3回アンインストールして再インストールしましたが、期待どおりに動作しました。

これはまったくの新人の間違いかもしれませんが、私はかなりの時間をかけて投稿と私のコードを調べてそれを理解しました。すべての状況を修正できるわけではありませんが、この特定のケースでは、それが私の問題の解決策になりました。


ありがとう!googles admob sdk example "adcatalog"を使用しているときにこの問題が発生し、このエラーが発生した場合、これは私にとってはうまくいきました。重要な注意事項は、ライブラリの横にあるチェックボックスをオンにすることです。私の場合、サポートとadmobsdk jar。
jsmars 2013

14

これは実際の質問には関係ないかもしれませんが、私の例では、Kotlinを実装しようとしましたが、省略しました apply plugin: 'kotlin-android'。MainActivityを.ktファイルとして認識できなかったため、エラーが発生しました。

それが誰かを助けることを願っています。


1
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSIONメインのbuild.gradle も追加
Rajkiran

11

このエラーは、これをしようとするようなメソッドの外でコードを実行しようとする愚かな間違い(つまり、私の友人が一度コードを見せてくれたときのような咳)の最終的な兆候である可能性もあります:

SQLiteDatabase db = openOrCreateDatabase("DB", MODE_PRIVATE, null); //trying to perform function where you can only set up objects, primitives, etc

@Override
public void onCreate(Bundle savedInstanceState) {
....
}

これではなく:

SQLiteDatabase db;

@Override
public void onCreate(Bundle savedInstanceState) {
db = openOrCreateDatabase("DB", MODE_PRIVATE, null);
....
}

1
巨大な助け。私の問題を修正し、私の最初の完全に機能するAndroidアプリの作成に私を導いた
TheUnCola

7

プロジェクトからBinGenフォルダーを削除し(プロジェクトがビルドされると自動的に返される)、次に->メニュー->プロジェクト->クリーンからプロジェクトをクリーンアップして、この問題を取り除きました。

ありがとう。


6

私の場合、設定していません setContentView(R.layout.main);

新しいクラスを作成する場合、これをon onCreate(Bundle savedInstanceState)メソッドに設定することを忘れないでください。

私はこの愚かな間違いを何度かしました。


6

作業中のプロジェクトをクリーンアップするか、Eclipseを再起動してください。次に、プロジェクトを実行します。それが動作します。


何度もこれが発生しました... IADLファイルを解決できません。おそらく問題の根本であり、Eclipseは古いファイルに基づいてコンパイルされていました...子供のクリーニング、再起動、コンパイルを忘れないでください。 。
ハンター- Orionnoir

6

私にとって、私のパッケージ文字列AndroidManifest.xmlは正しくありませんでした(チュートリアルからコピー)。このファイルのパッケージ文字列がメインのアクティビティと同じであることを確認してください。

 package="com.example.app"

これを行う簡単な方法は、[Manifest]タブでAndroidManifest.xmlファイルを開き、[パッケージ]の横のテキストボックスに入力するか、[参照]ボタンを使用することです。

また、私の活動のパッケージ文字列は間違っていました、例えば

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">

私は(愚かにも)数週間後、パッケージ名を変更したときに同じエラーを受け取りました。これを行う場合は、AndroidManifest.xmlファイルも更新してください。


5

OK、私はiPhoneでかなりの経験がありますが、Androidは初めてです。私が持っていたときに私はこの問題を受け取りました:

Button infoButton = (Button)findViewById(R.id.InfoButton);

上記のコード行:

@Override
public void onCreate (Bundle savedInstanceState) {
}

睡眠不足の可能性があります:P


2
私も睡眠不足です
Oz Mayt 2014年

3

私は最近、Eclipseの再インストールでこれに遭遇しました。私のコンパイラー準拠レベルはJava 1.7に設定され、プロジェクトには1.6が必要であることがわかりました。

Eclipseの場合:プロジェクト->プロパティ-> Javaコンパイラ-> JDKコンプライアンス


2

この問題が発生し、アクティビティの「起動モード」プロパティを設定することで修正しました。


2

この問題のもう1つの理由は、ライブラリーがないことです。

プロパティ-> Androidに移動し、ライブラリが正しく追加されていることを確認します


1
また、追加されたライブラリのチェックマークがプロジェクトのプロパティ-> Javaビルドパス->注文とエクスポート
Phil

2

同じ問題がありましたが、マニフェストファイルで正しい名前を使用してアクティビティを宣言しました。

私の問題は、「libs」フォルダーにサードパーティのライブラリをインポートする必要がなく、プロジェクトでそれらを参照する必要があったことです(右クリック、プロパティ、Javaビルドパス、ライブラリ、Add Jar ...)。


2

これは、アクティビティクラスがデフォルトパッケージ内にある場合に発生する可能性があります。アクティビティクラスを新しいパッケージに移動して修正しました。manifest.xmlを変更する

activity android:name=".MainActivity" 

activity android:name="new_package.MainActivity"

ありがとう。それだけでした。
ステファン

2

私の場合、onCreateアクティビティのためにが呼び出される前でも、コンポーネント(UI)を初期化しようとしていました。

onCreate後のメソッドでUIコンポーネントが初期化/リンクされていることを確認してくださいsetContentView

注意:これは、Androidプログラミングを学習しているときの私の最初の間違いです。


2

私にとって、それは上記のどれとも異なっていました、

アクティビティは抽象として宣言されたため、エラーが発生します。削除すると機能しました。

ついさっき

     public abstract class SampleActivity extends AppcompatActivity{
     }

除去後

     public class SampleActivity extends AppcompatActivity{
     }

1

これは、NDKを使用するときにかなり頻繁に発生します。を実行するたびに、Eclipseで「クリーン」を実行する必要があることがわかりましたndk-build。それが誰にも役立つことを願っています:)


1

このエラーはActionBarActivity、非AppCompatスタイルを使用して割り当てた場合にも発生します。

これを修正するには、アプリスタイルの親を次のTheme.AppCompatように設定します。

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <!-- Customize your theme here. -->
</style>

Bom Trabalho @Ostkontentitan!funcionou para mim、obrigado。
Emerson Barcellos 2017

1

プロジェクト>プロパティ>アンドロイド>を右クリックして、以前にAndroid 4.4で行っていた別のバージョンのAndroidを試してから、Android 4.3に変更してみました。


1

私は同じ問題を抱えていました(アクティビティをインスタンス化できません):

最初の理由:

アクセスしていた

Camera mCamera;
Camera.Parameters params = mCamera.getParameters();

mCamera = Camera.open();

正しい方法は、まずカメラを開いてから、パラメータにアクセスすることです。

2番目の理由:マニフェストファイルでアクティビティを宣言する

<activity android:name=".activities.MainActivity"/>

3番目の理由:マニフェストファイルでカメラの権限を宣言します。

<uses-feature android:name="android.hardware.Camera"></uses-feature>
<uses-permission android:name="android.permission.CAMERA" />

お役に立てれば


1

私の場合、私はFacebook SDKを埋め込もうとしていて、間違ったアプリケーションIDを持っていました。したがって、エラーが発生していました。マニフェストファイルには、適切なメタデータが必要です。

<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />

1

Android Studio 2.3.3とAndroid Studio 3.0.0がインストールされている場合、開発用に2つのプログラムを切り替えると、このエラーが発生します。これは、あるプログラムでサポートされているクラスが他のプログラムでサポートされていない、またはその逆の状況が存在するためです。プロジェクトの開発に使用されているAndroid Studioのバージョンの一貫性を維持することが重要です。


1

この回答のdjjeckコメントで示唆されているように、クラスに修飾子を付けるのに失敗しました。public

そのはず

public class MyActivity extends AppCompatActivity {

それは私のような人を助けるかもしれません。


1

上記の解決策をすべて試しましたが、何もうまくいきません。extend代わりにアクティビティを追加した後AppCompatActivity、正常に動作した。

中古

public class MainActivity extends Activity  

の代わりに

public class MainActivity extends AppCompatActivity 

それが本当の問題なのかわかりません。


0

これActivityは、古いバージョンのAndroidでは利用できず、v4サポートパッケージにも含まれていないHoneycombからのインポートを使用する2.2 を実行しようとしたときに起こりました。


0

新しいアクティビティを追加 AndroidManifest.xmlなどを".NewActivity"

 </activity>        
    <activity android:name=".NewActivity" />
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.