java.lang.RuntimeException:无法实例化活动ComponentInfo

时间:2011-01-14 05:37:04

标签: android fatal-error

我试图运行示例代码 在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

修改 大多数初学者都会遇到此错误,那就是您必须在Manifest文件中添加所有活动。

43 个答案:

答案 0 :(得分:128)

这是你的意图的问题。

请在Activity

中添加AndroidManifest.xml

如果您想要开展新活动,请在AndroidManifest.xml

中注册

答案 1 :(得分:50)

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

<application>
    ....

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

另外,检查您是否错过了活动路径前面的前一个点

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

答案 2 :(得分:48)

您可能试图在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);
  }
  ...
}

答案 3 :(得分:42)

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

答案 4 :(得分:27)

Image

这也是因为这个问题。我取消选中需要导出到apk的罐子,同样的事情发生了。请勾选你的应用需要运行的罐子。

答案 5 :(得分: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&gt;上更改了顺序。订单和导出选项卡 - 我将JAR设置为列表中的第一项(它是/ src和/ gen项目之后的最后一项)。

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

这可能是一个彻头彻尾的新手错误,但我花了很长时间来挖掘帖子和我的代码才弄清楚,所以希望它对其他人有帮助。可能无法解决所有情况,但在这种特殊情况下,最终成为我问题的解决方案。

答案 6 :(得分: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);
....
}

答案 7 :(得分:11)

这可能与实际问题无关,但在我的实例中,我尝试实施Kotlin并遗漏apply plugin: 'kotlin-android'。发生错误是因为它无法将MainActivity识别为.kt文件。

希望它有所帮助。

答案 8 :(得分:7)

我通过删除项目中的BinGen文件夹(项目将在构建时自动返回)然后从 - &gt; Menu - &gt;清除项目来解决此问题。项目 - &gt;干净。

感谢。

答案 9 :(得分:6)

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

答案 10 :(得分:6)

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

 package="com.example.app"

执行此操作的简单方法是在“清单”选项卡中打开AndroidManifest.xml文件,并在“包”旁边的文本框中键入它,或使用“浏览”按钮。

此外,我的活动的包裹字符串错误,例如

<activity android:name="com.example.app.MainActivity" android:label="@string/app_name">
几周后,当我重命名我的包名时,我(愚蠢地)得到了同样的错误。如果这样做,请确保您也更新了AndroidManifest.xml文件。

答案 11 :(得分:5)

好的,我在iPhone上相当有经验,但对android很新。我有这个问题时得到了这个问题:

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

上面这行代码:

@Override
public void onCreate (Bundle savedInstanceState) {
}

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

答案 12 :(得分:3)

我最近在重新安装Eclipse时遇到了这个问题。结果我的编译器合规性级别设置为Java 1.7,项目需要1.6。

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

答案 13 :(得分:2)

如果您的活动类位于默认包中,则会发生这种情况。我通过将活动类移动到新包来修复它。并更改manifest.xml

activity android:name=".MainActivity" 

activity android:name="new_package.MainActivity"

答案 14 :(得分:2)

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

我的问题是我没有在“libs”文件夹中导入第三方库,我需要在我的proyect中引用它们(右键单击,属性,Java构建路径,库,添加Jar .. )。

答案 15 :(得分:2)

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

转到属性 - &gt; Android并检查您是否正确添加了库

答案 16 :(得分:2)

对我来说,它与以上任何一项都不一样,

该活动被声明为抽象,这就是给出错误的原因。 一旦删除,它就起作用了。

更早

     public abstract class SampleActivity extends AppcompatActivity{
     }

删除后

     public class SampleActivity extends AppcompatActivity{
     }

答案 17 :(得分:2)

遇到此问题,并通过设置活动的“启动模式”属性进行修复。

答案 18 :(得分:1)

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

答案 19 :(得分:1)

正如djjeckthis回答评论中所建议的那样,我错过了为我的班级添加public修饰符。

应该是

public class MyActivity extends AppCompatActivity {

这可能会对像我这样的人有所帮助。

答案 20 :(得分:1)

在我的情况下,我试图嵌入Facebook SDK而我的错误应用程序ID ;因此错误突然出现。在清单文件中,您应该拥有正确的元数据:

ApplicationSignInManager

答案 21 :(得分:1)

我已经尝试了以上所有解决方案,但对我来说没有任何作用。在我刚刚添加extend活动而不是AppCompatActivity并且工作正常后。

使用

public class MainActivity extends Activity  

而不是

public class MainActivity extends AppCompatActivity 

我不知道那是什么真正的问题。

答案 22 :(得分:1)

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

第一个原因:

我正在访问

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" />

希望这有帮助

答案 23 :(得分:1)

有多少种方法可以解决此错误!

鉴于没有其他应用或原因,我将添加另一个。

我在活动课堂的声明中忘记了“ 公开”!这是私人包裹。

我一直在写很多蓝牙代码,以至于习惯使我创建一个私有的活动类。

对这个错误消息的含糊之处有所说明。

答案 24 :(得分:1)

当您使用ActionBarActivity但指定了非AppCompat样式时,也会发生此错误。

要解决此问题,只需将您的应用程序样式父级设置为Theme.AppCompat,如下所示。:

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

答案 25 :(得分:1)

右键点击项目&gt;属性&gt; android&gt;并尝试使用不同版本的android之前我正在使用android 4.4然后我改为android 4.3并且它有效!

答案 26 :(得分:1)

使用NDK时,这种情况经常发生在我身上。我发现每次执行ndk-build后我都必须在Eclipse中执行“清理”。希望它可以帮助任何人:)

答案 27 :(得分:0)

我的问题是活动源文件开头缺少包声明:

package com.my.package

答案 28 :(得分:0)

在我的情况下,我有两个版本的&#34; android-support-v4.jar&#34;项目中的参考资料。解决此问题后(删除了额外/不正确的引用)解决了问题。

答案 29 :(得分:0)

就我而言,我忘记将MainActivity类设为公开

其他解决方案:

  1. 清单文件

    中添加活动
  2. 验证所有访问修饰符

答案 30 :(得分:0)

当我尝试在2.2版本上运行Activity使用Honeycomb的导入时,发生了这种情况,这些导入在旧版本的Android中不可用,也未包含在v4支持包中。

答案 31 :(得分:0)

当您在applicationId文件中键入错误的build.gradle时,也会发生这种情况。

例如您的应用程序ID为com.example.myapp.app

您这样写了build.gradle文件:

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.1"

    defaultConfig {
        applicationId "com.example.myapp"
        //this will make your app crash so write exact applicationId as it is
        minSdkVersion 8
        targetSdkVersion 8
    }

答案 32 :(得分:0)

在我的情况下,我甚至在为Activity调用onCreate之前都在尝试初始化组件(UI)。

确保onCreate之后,您的UI组件已通过setContentView方法初始化/链接

注意:这是我学习Android编程时的第一个错误。

答案 33 :(得分:0)

不要这样

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

答案 34 :(得分:0)

有时isMinifyEnabled = false可能有所帮助(确保在发布前清理项目)

答案 35 :(得分:0)

您的新活动会像AndroidManifest.xml

那样添加".NewActivity"
 </activity>        
    <activity android:name=".NewActivity" />

答案 36 :(得分:0)

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

此外,如果他们以路径开头,请确保此路径存在。

E.g。这不起作用:

<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" >

答案 37 :(得分: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();
}
}

答案 38 :(得分:0)

大部分时间如果Activity名称发生更改,则反映在除AndroidManifest.xml文件之外的整个项目中。

您只需手动在manifest中添加名称。

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

答案 39 :(得分:0)

就我而言,我必须通过转到 Window&gt;&gt;添加新的Android 6.0库。偏好设置&gt;&gt; Java&gt;&gt;构建路径&gt;&gt;用户库&gt;&gt;添加库&gt;&gt;用户库&gt;&gt;新

将其命名为Android 6.0,然后单击“确定”。之后,添加你可以在&#34; sdklocation / platforms / android-23 / android.jar&#34;

中找到的android.jar文件。

确保在Android项目中完成所有这些操作。

答案 40 :(得分:0)

如果您有两个具有相同软件包名称的项目,并且在另一个项目之前运行其中一个项目,那么也会发生这种情况,所以我猜它会混淆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中,右键单击Package Explorer选项卡中的软件包&gt;选择Refractor&gt;选择重命名...),然后在AndroidManifest.xml文件中更改它以及您需要的任何其他位置(例如,像所有.java文件一样)

答案 41 :(得分:0)

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

例如。如果我检索这样的字符串

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

并将此行代码置于onCreate之前/之上,然后抛出此异常。

答案 42 :(得分:-1)

只需单击文件并关闭项目 和 再次打开

OR

当您打开它时,请清理项目,然后运行 它对我有用.....

此问题是由于更改了应用程序的软件包名称 我已经遇到了这个问题 当我没有解决方案时,我会很生气,然后关闭该项目,然后我想,为什么不尝试其他方法……。那么我的项目就可以工作了……