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 

编辑这个错误发生在大多数初学者,事情是,你必须在清单文件中添加所有的活动。

这是你的意图的问题。

请在您的AndroidManifest.xml添加您的Activity

当你想做一个新的活动,你应该注册在你的AndroidManifest.xml

在我的情况下,我忘了添加谷歌地图库

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

另外,请检查您是否在活动path之前缺less前面的点

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

您可能正在尝试查找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); } ... } 

还有另一种方法来获取java.lang.RuntimeException:无法实例化活动ComponentInfoexception,这是您尝试启动的活动是抽象的 。 我犯了这个愚蠢的错误,很容易忽略。

图片

这也是因为这个问题而发生的。 我没有选中需要导出到apk的jar子,同样的事情发生了。 请勾选您的应用程序需要运行的jar子。

我也遇到过这个问题,但方式稍有不同。 这是我的场景:

应用详情:

  • 使用ActionBarSherlock作为库
  • 在ActionBarSherlock库中使用android-support-v4-r7-googlemaps.jar,这样我就可以在我的主项目中使用“map fragment”
  • 将jar添加到我的主项目的构buildpath
  • 在库项目和我的主项目的清单中包含<uses-library android:name="com.google.android.maps" /> (这可能不是库中必需的)?
  • 主项目中的清单具有适当的活动定义和所有适当的属性
  • 我没有一个抽象的活动或任何其他问题,我已经看到堆栈溢出有关这个问题。

不过,我仍然遇到原帖中描述的错误,无法让它消失。 但是,这个问题在一个方面略有不同:

  • 它只影响到我的设备的应用程序的全新安装。 任何时候第一次安装应用程序,我会得到以下几个“警告”的错误:无法parsingFragmentActivity的超类
  • 这些警告追溯到ActionBarSherlock库
  • 该应用程序将强制closures和崩溃。
  • 如果我立即重build和重新部署应用程序,它运行良好。
  • 它坠毁的唯一时间是在一个完全新鲜的安装。 如果我卸载应用程序,从Eclipse再次构build和部署,它会崩溃。 build立/部署第二次,它会正常工作。

我如何解决它:

  • 在ActionBarSherlock库项目中,我添加了android-support-v4-r7-googlemaps.jar到构buildpath
  • 这一步并没有解决问题

  • 一旦jar被添加到构buildpath,我已经改变了Java构buildpath>顺序和导出选项卡上的顺序 – 我把JAR设置为列表中的第一个项目(它是/ src和/ gen项目之后的最后一个项目)。

  • 然后,我重build并将应用程序重新部署到我的设备 – 它按预期的方式在全新安装上运行。 只是为了确定,我再次卸载了2-3次,并重新安装 – 仍按预期工作。

这可能是一个全新的菜鸟错误,但是我花了很长一段时间仔细阅读post和代码,希望能对别人有所帮助。 可能无法解决所有情况,但是在这种特殊情况下,这最终成为我的问题的解决scheme。

这个错误也可能是一个愚蠢的错误的终极标志(例如,当我 – 我的意思是,咳嗽,就像我的一个朋友向我展示他们的代码一样),他们试图在方法之外执行代码,比如尝试这样做:

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

在我的情况下,我没有设置setContentView(R.layout.main);

如果你创build一个新的类,不要在onCreate(Bundle savedInstanceState)方法中设置这个。

我多次犯了这个愚蠢的错误。

我通过从项目中删除BinGen文件夹(当项目build立时会自动返回),然后从 – > Menu – > Project – > clean清除项目,摆脱了这个问题。

谢谢。

对我而言, AndroidManifest.xml中的包string不正确(从教程中复制)。 确保该文件中的包string与主要活动的位置相同,例如

  package="com.example.app" 

一个简单的方法是在“Manifest”选项卡中打开AndroidManifest.xml文件,并在Package旁边的文本框中input它,或者使用Browsebutton。

此外,我的活动包string是错误的,例如

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

当我重命名我的软件包名称时,我(愚蠢地)几星期后得到相同的错误。 如果你这样做,确保你也更新了AndroidManifest.xml文件。

这可能与实际问题没有关系,但在我的例子中,我试图实现Kotlin并且省略了apply plugin: 'kotlin-android' 。 发生错误的原因是无法将MainActivity识别为.kt文件。

希望它可以帮助别人。

只需清理您的工作项目或重新启动eclipse。 然后运行你的项目。 它会工作。

好吧,我在iPhone上是相当有经验的,但新的Android。 我有这个问题时,我有:

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

这行代码如上:

 @Override public void onCreate (Bundle savedInstanceState) { } 

可能是我睡眠不足:P

我最近遇到了这个新鲜重新安装的Eclipse。 原来,我的编译器符合性级别设置为Java 1.7,项目需要1.6。

在Eclipse中:项目 – >属性 – > Java编译器 – > JDK合规性

得到这个问题,并通过设置活动的“启动模式”属性来修复它。

这个问题的另一个原因可能是一个缺失的库。

去属性 – > Android和检查你正确地添加库

我有同样的问题,但我有我的活动声明在清单文件中,正确的名称。

我的问题是,我没有导入一个“库”文件夹中的第三方库,我需要在我的项目(右键单击,属性,Java构buildpath,库,添加jar …)引用它们。

如果您的活动类在默认包内,就会发生这种情况。 我通过将活动类移到一个新的包中来解决它。 并更改manifest.xml

之前

 activity android:name=".MainActivity" 

 activity android:name="new_package.MainActivity" 

在使用NDK时,这种情况经常发生在我身上。 我发现在每次执行ndk-build之后,我都需要在Eclipse中执行“Clean”。 希望它有助于任何人:)

当您使用ActionBarActivity但分配了一个非AppCompat样式时也会发生此错误。

要解决这个问题,只需将您的应用程序样式父级设置为一个像这样的Theme.AppCompat

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

右键单击项目>属性>安卓>和尝试不同版本的安卓系统早期我正在做的与Android 4.4,然后我改变到Android 4.3,它的工作!

我有同样的问题(无法实例化活动):

第一个原因:

我正在访问

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

之前

 mCamera = Camera.open(); 

所以正确的做法是,先打开相机,然后访问参数。

第二个原因:在清单文件中声明你的活动

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

第三个原因:在清单文件中声明Camera权限。

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

希望这可以帮助

在我的情况下,我试图embeddedFacebook的SDK ,我有错误的应用程序ID ; 从而出现错误。 在你的清单文件中,你应该有适当的元数据:

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

如果您安装了Android Studio 2.3.3和Android Studio 3.0.0,则在两个程序之间切换以进行开发将导致此错误。 这是因为在一个程序中支持的类不被另一个支持,反之亦然。 保持Android Studio的哪个版本用于开发项目的一致性是非常重要的。

这发生在我身上,当我试图在2.2版本上运行一个Activity ,该版本使用了Honeycomb中的导入function,而这些function在旧版本的Android中不可用,也不包含在v4支持包中。

您的新活动添加AndroidManifest.xml".NewActivity"

  </activity> <activity android:name=".NewActivity" /> 

您应该确保应用程序中的所有活动在AndroidManifest.xml文件中正确定义。

另外,如果他们从一个path开始,确保这个path存在。

例如,这将无法正常工作:

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

如果你的应用程序的名字是com.example.networkusage (注意丢失.android。)

或者更好的是,在清单中定义活动时不要包含path。 只是把他们的名字(在它前面的一个点)。

 <activity android:name=".NetworkActivity" android:label="@string/app_name" > 

你可能在你的领域有一些错误

 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); } } 

所以我的build议是在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(); } } 

这也可能发生,如果你有两个具有相同包名的项目,并且你把其中一个运行在另一个之前,所以我猜它会让Eclipse感到困惑。 对我来说,当我在同一个工作区中复制eclipse中的Android教程时,发生了这种情况,并且保留了相同的包名,但添加了ActionBarSherlock(ABS)

  package="com.example.android.whatever" 

所以在我的AndroidManifest.xml文件中,我的工作空间中的教程项目和复制的教程项目都包含string:

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

只需通过重构来更改包名称(在eclipse中,右键单击Package Explorer选项卡中的包>selectRefractor> select Rename …),然后在您的AndroidManifest.xml文件和其他任何需要的地方更改它(例如像所有.java文件)

另外,如果您正在使用当前活动中的getIntent从另一个活动的intent中获取某些内容,并在onCreate之前设置这些检索到的数据,则会抛出此exception。

例如。 如果我检索这样的string

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

并把这行代码之前/上面onCreate然后这个exception被抛出。