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

编辑 此错误发生在大多数初学者身上,问题是您必须在清单文件中添加所有活动。


感谢Dan Breslau ...现在看起来更好..该怎么做?
rahul

1
抱歉,对不起,您的时间太长了..我只是忘了把新课程添加到清单文件中。-–
rahul

1
更新了我所有的工具(eclipse和sdk管理器)后,为我修复了该问题,并向项目添加了android支持库
Hayden Thring 2013年

我有这个问题,请参阅此 stackoverflow.com/questions/30473270/…–
DanialAbdi

Answers:


137

这是您意图的问题。

请在中添加您ActivityAndroidManifest.xml

当您要进行新活动时,应在中注册AndroidManifest.xml


4
我有一个不扩展活动的类,仅包含一些常用功能;但是我仍然得到这个例外;为什么?
Manoj Kumar 2012年

在我的项目中,它表示在查看xml文件中的android:name时该类不是公共的。当我在主要活动的课前添加公共内容时,该应用程序运行就没有问题。奇怪的。
Codebeat

我在正在开发的本机应用程序中遇到了这个问题。.我在活动类中添加了另一种方法,并且我开始遇到此错误..对我来说
全新

6
另一个选择是您的活动在清单中,但它声明为abstract(我在重构期间犯了该错误,并且错误消息没有太大帮助)。
捷克学

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
喔,谢谢 您是救生员。这很傻,但是非常感谢。现在已经困扰了我一个星期。
–meain

犯了同样的错误;)
Sumit Jha 2016年

同样的错误在这里。谢谢
Pooja

53

还有一种获取java.lang.RuntimeException的方法:无法实例化活动ComponentInfo异常,这就是您尝试启动的活动是abstract。我曾经犯过这个愚蠢的错误,它很容易被忽略。


13
另外,该活动必须是公开的(这是我的错误)。
djjeck 2012年

抱歉两年后打扰您,但我想知道为什么您不能启动抽象活动?
本杰明·

2
@BenjaminFranklin抽象类表示它不完整,缺少部分。用关键字abstract前缀的类意味着不能直接实例化它,而只能通过继承实例化:而其他类则实现了抽象类缺少的功能。
Kit10 2014年

我已经继承了抽象类,但仍然无法工作。您能否进一步解释?
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,发生了同样的事情。请勾选您的应用需要运行的罐子。


重要的是要看到此问题,并正确尝试每个依赖项组件。例如,在Android Studio(或Intellij IDEA)上,为依赖项选择正确的作用域(提供,编译等)。就我而言,将“提供给编译”更改为正常工作。
dayanruben 2015年

15

我也遇到了这个问题,但是方式略有不同。这是我的情况:

应用详细信息:

  • 将ActionBarSherlock用作库
  • 在ActionBarSherlock库中使用android-support-v4-r7-googlemaps.jar,这样我就可以在主项目中使用“地图片段”
  • 将jar添加到我的主项目的构建路径中
  • 包括<uses-library android:name="com.google.android.maps" />在图书馆项目和我的主要项目的清单中(图书馆可能不需要吗?)
  • 主要项目中的清单具有适当的活动定义和所有适当的属性
  • 我没有抽象活动,也没有在Stack Overflow上看到的与此问题有关的其他任何陷阱。

但是,我仍然遇到原始帖子中描述的错误,无法消除它。但是,该问题在一方面有所不同:

  • 它只影响了应用程序到我设备上的全新安装。每次首次安装该应用程序时,我都会收到以下“警告”警告:无法解析FragmentActivity的超类
  • 这些警告可追溯到ActionBarSherlock库
  • 该应用将强制关闭并崩溃。
  • 如果我立即重建并重新部署了该应用程序,它就可以正常工作。
  • 它崩溃的唯一时间是全新安装。如果我卸载了该应用程序,并从Eclipse重新构建并部署了该应用程序,它将崩溃。再次构建/部署,就可以了。

我如何解决它:

  • 在ActionBarSherlock库项目中,我将android-support-v4-r7-googlemaps.jar添加到了构建路径
  • 仅此步骤不能解决问题

  • 将jar添加到构建路径后,我在Java Build Path> Order and Export选项卡上更改了顺序-我将JAR设置为列表中的第一项(它是/ src和/ gen项之后的最后一项) )。

  • 然后,我重新构建了该应用程序并将其重新部署到我的设备上-在全新安装中,它可以按预期工作。可以肯定的是,我再次卸载了2-3次,然后重新安装-仍然按预期工作。

这可能是一个完全的菜鸟错误,但是我花了相当长的时间浏览帖子和我的代码以弄清楚它,因此希望它可以对其他人有所帮助。可能无法解决所有情况,但是在这种情况下,最终解决了我的问题。


谢谢!当我使用谷歌的admob sdk示例“ adcatalog”遇到此问题并收到此错误时,这对我有用。重要说明是选中库旁边的复选框。就我而言,支持和admobsdk罐子。
jsmars

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 2015年


6

就我而言,我还没有设置 setContentView(R.layout.main);

如果创建新类,请不要在on onCreate(Bundle savedInstanceState)方法中进行设置。

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


6

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


发生了很多次……现在它无法解决IADL文件,这可能是问题的根源,并且eclipse是基​​于旧文件进行编译的……所以请记住清理,重新启动和编译孩子。 。
猎人Orionnoir

6

对我来说,我的软件包字符串AndroidManifest.xml不正确(从教程中复制)。确保此文件中的程序包字符串与您的主要活动所在的字符串相同,例如

 package="com.example.app"

一种简单的方法是在“清单”选项卡中打开AndroidManifest.xml文件,然后在“程序包”旁边的文本框中键入该文件,或使用“浏览”按钮。

另外,我的活动的软件包字符串是错误的,例如

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

几周后,当我重命名程序包名称时,我(愚蠢地)遇到了同样的错误。如果这样做,请确保也更新AndroidManifest.xml文件。


5

好的,我在iPhone上经验丰富,但对Android还是陌生的。我遇到以下问题时遇到了这个问题:

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

上面的代码行:

@Override
public void onCreate (Bundle savedInstanceState) {
}

可能是我被剥夺了睡眠:P


2
我也被剥夺了睡眠
Oz Mayt 2014年

3

我最近在重新安装Eclipse时遇到了这个问题。事实证明,我的Compiler合规性级别设置为Java 1.7,项目要求为1.6。

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


2

解决了此问题,并通过设置活动的“启动模式”属性来解决此问题。


2

此问题的另一个原因可能是缺少库。

转到属性-> Android,然后检查是否正确添加了库


1
还要检查添加的库,在项目属性-> Java构建路径->订单和导出
Phil

2

我遇到了同样的问题,但是我的活动已在清单文件中用正确的名称声明。

我的问题是我不必在“ libs”文件夹中导入第三方库,而是需要在我的proyect中引用它们(右键单击,属性,Java Build Path,库,Add Jar ...)。


2

如果您的活动类在默认程序包中,则可能会发生这种情况。我通过将活动类移至新程序包来解决此问题。并更改manifest.xml

之前

activity android:name=".MainActivity" 

activity android:name="new_package.MainActivity"

谢谢。就是这样。
Stephane

2

就我而言,我甚至在onCreate为Activity调用之前就尝试初始化components(UI)。

确保您的UI组件在onCreate之后的方法中被初始化/链接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。
艾默生·

1

右键单击项目>属性> android>并尝试使用我之前使用android 4.4的不同版本的android,然后我更改为android 4.3并成功了!


1

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

第一个原因:

我正在访问

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

之前

mCamera = Camera.open();

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

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

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

第三个原因:在清单文件中声明“摄像机”权限。

<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,则在两个用于开发的程序之间切换会导致此错误。这是因为在某些情况下一个程序所支持的类不被另一程序所支持,反之亦然。保持使用哪个版本的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在2.2 上运行该版本时,这发生在我身上,该版本使用了从Honeycomb导入的版本,而该版本在较旧版本的Android中不可用,并且也不包含在v4支持包中。


0

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

 </activity>        
    <activity android:name=".NewActivity" />
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.