web-dev-qa-db-ja.com

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

サンプルコードを実行しようとしていた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

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

143
rahul

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

ActivityAndroidManifest.xmlに追加してください。

新しいアクティビティを作りたいときは、あなたのAndroidManifest.xmlにそれを登録するべきです。

129
Tanmay Mandal

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

<application>
    ....

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

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

<activity Android:name=".activities.MainActivity"/>
51
Maragues

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);
  }
  ...
}
48
SMUsamaShah

Java.lang.RuntimeException:アクティビティComponentInfoをインスタンス化できませんという例外を取得する別の方法があります。それが、開始しようとしているアクティビティがabstractです。私はこのばかげた間違いを一度したのですが、見逃しやすいです。

42
Kevin

Image

それはまたこの問題のために起こります。私はapkにエクスポートする必要があるjarファイルのチェックを外し、これと同じことが起こりました。アプリの実行に必要なjarをチェックしてください。

27
Haroon Dilshad

私もこの問題に遭遇しましたが、少し違う方法で。これが私のシナリオです。

アプリ詳細:

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

しかし、私はまだ元の記事に記載されているエラーに遭遇し、それを消すことができませんでした。ただし、問題は1つの点でわずかに異なりました。

  • それは私のデバイスへのアプリケーションの新規インストールにのみ影響しました。アプリが初めてインストールされたときはいつでも、いくつかの「警告」が前に付いたエラーが表示されます。FragmentActivityのスーパークラスを解決できません
  • これらの警告はActionBarSherlockライブラリにさかのぼります。
  • アプリは強制終了してクラッシュします。
  • 私がすぐにアプリを再構築して再デプロイしても、うまくいきました。
  • それがクラッシュした唯一の時は完全に新しいインストールにありました。 Eclipseからビルドして再度デプロイしたアプリをアンインストールすると、クラッシュします。二度目のビルド/デプロイで、うまくいきます。

修正方法

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

  • Jarがビルドパスに追加されたら、[Java Build Path]> [Order and Export]タブで順序を変更しました - リストの最初の項目にJARを設定しました(/ src項目と/ gen項目の後の最後の項目です)。 ).

  • それから私は自分のデバイスにアプリを再構築して再デプロイしました - それはフレッシュインストールで期待通りに動作しました。念のために、私はそれを2-3回再度アンインストールして再インストールしました - それでも予想通りに動いた。

これは全くの新人の間違いかもしれませんが、私はそれを理解するために投稿と私のコードを掘り下げるのにかなりの時間を費やしたので、うまくいけばそれは他の誰かに役立つことができます。すべての状況を解決できるわけではありませんが、この特定のケースでは、それが私の問題の解決策になってしまいました。

15
Kyle

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

誰かに役立つことを願っています。

11
Muz

このエラーは、(私の友人が私に自分のコードを見せてくれたときのように)愚かなミスの最終的な兆候でもある可能性があります。 :

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);
....
}
11
ColossalChris

プロジェクトからBinおよびGenフォルダーを削除し(プロジェクトがビルドされるときに自動的に戻ってきます)、 - >メニュー - >プロジェクト - >クリーンの順に選択して、この問題を解決しました。

ありがとう。

7
Jagdeep Singh

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

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

私はこのばかげた間違いを何度かしました。

6
saji159

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

 package="com.example.app"

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

また、私のアクティビティのパッケージ文字列が間違っていました。

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

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

6
satyrFrost

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

6
Emran Hamza

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

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

上記のコード行:

@Override
public void onCreate (Bundle savedInstanceState) {
}

私は眠れないかもしれません:P

5
iSee

私は最近Eclipseを再インストールしたときにこれに遭遇しました。私のコンパイラのコンプライアンスレベルはJava 1.7に設定され、プロジェクトは1.6を要求しました。

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

3
Tapirboy

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

activity Android:name=".MainActivity" 

後に

activity Android:name="new_package.MainActivity"
2
Satthy

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

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

2
ayalcinkaya

私は同じ問題を抱えていましたが、マニフェストファイルで正しい名前で自分のアクティビティを宣言しました。

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

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

2
Zorglube

this answerのコメントでdjjeckによって示唆されているように、私は自分のクラスにpublic修飾子を入れませんでした。

そのはず

public class MyActivity extends AppCompatActivity {

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

1
Shylendra Madda

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

最初の理由:

私がアクセスしていた

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
Sdembla

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

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

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

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

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

プロジェクト>プロパティ> Android>を右クリックして、以前のバージョンのAndroid 4.4で試してみた後、Android 4.4に変更して動作しました。

1
nikhilgotan

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

1
kizzx2

私は上記のすべての解決策を試してみましたが、私には効果がありません。 extendの代わりにAppCompatActivityアクティビティを追加したところ、うまくいきました。

中古

public class MainActivity extends Activity  

の代わりに

public class MainActivity extends AppCompatActivity 

私は本当の問題がそれだったのか分からない。

1
Sagar Jethva

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

1
hexicle

アプリケーションのすべてのアクティビティがAndroidManifest.xmlファイルで正しく定義されていることを確認してください。

また、パスで始まる場合は、このパスが存在することを確認してください。

例えば。これはうまくいきません。

<activity Android:name=".com.example.Android.networkusage.NetworkActivity" Android:label="@string/app_name" >

アプリケーションの名前がcom.example.networkusageの場合(不足している.Androidに注意してください。)

あるいは、マニフェスト内でアクティビティを定義するときにパスを含めないでください。彼らの名前だけを入れてください(それの前にドットが付いています)。

<activity Android:name=".NetworkActivity" Android:label="@string/app_name" >
0
Dzhuneyt

isMinifyEnabled = falseが役に立つことがあります(起動する前にプロジェクトをきれいにしてください)

0
Igor Wojda

あなたの新しいアクティビティはAndroidManifest.xmlのような".NewActivity"を追加します

 </activity>        
    <activity Android:name=".NewActivity" />
0
NagarjunaReddy

また、現在のアクティビティでintentを使用して他のアクティビティのgetIntentから何かを取得し、取得したデータをonCreateの前または上に設定している場合も、この例外がスローされます。

例えば。このような文字列を取得した場合

final String slot1 = getIntent().getExtras().getString("Slot1");

そして、このコード行をonCreateの前/上に置くと、この例外がスローされます。

0
Sash_KP

私の場合は、プロジェクト内に2つのバージョンの "Android-support-v4.jar"参照がありました。これを解決した後(追加/不正確な参照を削除)、問題を解決しました。

0
ryaliscs

私の場合は、ウィンドウ>>設定>> Java >>ビルドパス>>ユーザライブラリ>>ライブラリの追加>>ユーザライブラリ>>の順に移動して、新しいAndroid 6.0ライブラリを追加する必要がありました。新しい

Android 6.0という名前を付けて、[OK]をクリックします。その後、 "sdklocation/platform/Android-23/Android.jar"にあるAndroid.jarファイルを追加します。

必ずAndroidプロジェクトでこれをすべて行ってください。

0
Eames

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

0
pqn

ファイルをクリックしてプロジェクトを閉じ、もう一度開くだけです

OR

あなたがそれを開いてプロジェクトをきれいにしてから実行すると、私のために動作します。

この問題は、アプリのパッケージ名を変更するためです。解決策がないときにその問題に直面しましたが、怒りでプロジェクトを閉じます。

0
Zahid Hussain

同じパッケージ名を持つ2つのプロジェクトがあり、そのうちの1つを他のプロジェクトの前に実行した場合にも、これが発生する可能性があるため、Eclipseは混乱します。私にとっては、同じワークスペースにあるEclipseのAndroidチュートリアルをコピーし、パッケージ名を同じままにしてActionBarSherlock(ABS)を追加したときに起こりました。

 package="com.example.Android.whatever"

それで、私のAndroidManifest.xmlファイルでは、私のワークスペースにあったチュートリアルプロジェクトとコピーしたチュートリアルプロジェクトの両方がパッケージ文字列として持っていました:

<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
    package="com.example.Android.whatever"

    ....
</manifest>

リファクタリング(Eclipseでは、[パッケージ・エクスプローラー]タブでパッケージを右クリック> [Refractor]> [名前の変更...]を選択)してから、必要な場所に変更するだけです。 .Javaファイル)

0
nommer

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

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

注意:これはAndroidプログラミングを学んでいる間の私の最初の間違いです。

0
Anup

Activityの名前が変更された場合、ほとんどの場合、AndroidManifest.xmlファイルを除くプロジェクト全体に反映されていました。

手動でmanifestに名前を追加するだけです。

<activity
Android:name="Activity_Class_Name"
Android:label="@string/app_name">
</activity>
0
Swapnil Kotwal

こんなことしないで

ImageView imageView=findViewById(R.id.imageView);
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

こんな感じ

ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    imageView=findViewById(R.id.imageView);
0

あなたの分野のようにいくつかのエラーがあるかもしれません

public class Search_costumer extends Activity {

// you may have some errors like this 
int x =3/0;
// I have error in initializing this variable too 
 MySimpleOnGestureListener mySimpleOnGestureListener =new MySimpleOnGestureListener();

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
}
}

だから私のアドバイスはあなたのフィールドで直接ではなくonCreateメソッドですべての初期化を実行することです

そのように解決する

public class Search_costumer extends Activity {

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

// you may have some errors like this 
int x =3/0;
// I have error in initializing this variable too 
 MySimpleOnGestureListener mySimpleOnGestureListener =new MySimpleOnGestureListener();
}
}