例外: 无法实例化活动组件信息

我只是想运行一个样本代码 当在 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 文件中添加所有活动。

412435 次浏览

这是你意图的问题。

请在你的 AndroidManifest.xml中加入你的 Activity

当你想要创建一个新的活动时,你应该把它注册到你的 AndroidManifest.xml中。

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

<application>
....


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

另外,检查活动路径前面的点没有丢失

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

还有另一种获得 例外: 无法实例化活动组件信息异常的方法,那就是您试图启动的活动是 摘要。我犯过一次愚蠢的错误,很容易被忽视。

这发生在我相当频繁的时候使用 NDK。我发现,在每次执行 ndk-build之后,都有必要在 Eclipse 中执行“ Clean”。希望对大家有所帮助:)

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

如果您创建了一个新类,不要忘记在 onCreate(Bundle savedInstanceState)方法中设置它。

这种愚蠢的错误我已经犯过好几次了。

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

好吧,我对 iPhone 很有经验,但对 Android 还是个新手:

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

上面这行代码:

@Override
public void onCreate (Bundle savedInstanceState) {
}

可能是我睡眠不足

当我试图在2.2上运行 Activity时,发生了这种情况,它使用了从 Honeycomb 导入的内容,这在旧版本的 Android 中是不可用的,在 v4支持包中也没有包含。

对于我来说,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文件。

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

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

您应该确保应用程序中的所有活动都在 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" >

我也遇到过这个问题,但方式略有不同:

应用程序细节:

  • 使用 ActionBarSherlock 作为库
  • 在 ActionBarSherlock 库中使用 android-support-v4-r7-googlemaps.jar,这样我就可以在主项目中使用“ map 片段”
  • 将 jar 添加到主项目的生成路径中
  • 在库项目和我的主项目的清单中都包含了 <uses-library android:name="com.google.android.maps" />(在库中可能不需要这样做?)
  • 主项目中的清单具有适当的活动定义和所有适当的属性
  • 我没有一个抽象的活动或任何其他陷阱,我已经看到在 Stack Overflow 相关的这个问题。

然而,我仍然遇到了在原文中描述的错误,并且无法让它消失。不过,问题在一个方面略有不同:

  • 它只是影响了在我的设备上重新安装应用程序。任何时候,应用程序第一次安装,我会得到错误之前的几个“警告”: 无法解析的片段活动的超类
  • 这些警告可以追溯到 ActionBarSherlock 库
  • 该应用程序将强制关闭和崩溃。
  • 如果我立即重建和重新部署应用程序,它工作得很好。
  • 它唯一一次崩溃是在一个全新的安装上。如果我卸载应用程序,从 Eclipse 构建并重新部署,它会崩溃。再次构建/部署时,它会工作得很好。

我是如何解决的:

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

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

  • 然后我重新构建并重新部署了这个应用程序到我的设备上——它在一个新的安装中能够正常工作。为了确保万无一失,我又卸载了它2-3次,并重新安装-仍然按照预期工作。

这可能是一个完全的新手错误,但我花了相当长的时间通过挖掘文章和我的代码来找出它,所以希望它可以对其他人有帮助。也许不能解决所有的问题,但在这个特殊的情况下,这最终成为了我问题的解决方案。

我最近在重新安装 Eclipse 时遇到了这个问题。原来我的编译器遵从级别被设置为 Java 1.7,而项目需要1.6。

在 Eclipse 中: 项目-> 属性-> Java 编译器-> JDK 兼容性

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

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

大多数时候,如果 Activity名称的变化反映了整个项目,除了 AndroidManifest.xml文件。

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

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

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

转到 Properties-> Android 并检查是否正确添加了库

我通过从项目中删除 BinGen文件夹(当项目构建时自动返回) ,然后从-> Menu-> Project-> clean 中清除项目,从而解决了这个问题。

谢谢。

我也有同样的问题,但是我在 Manifest 文件中用正确的名称声明了我的活动。

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

Image

这种情况也是因为这个问题而发生的。我没有检查罐子,需要出口到 apk 和同样的事情发生了。请勾选应用程序需要运行的罐子。

如果您有两个具有相同包名称的项目,并且在运行其中一个项目之前先运行另一个项目,那么这种情况也可能发生,因此我猜测这会使 Eclipse 感到困惑。对于我来说,当我在同一个工作区中复制了一个 Android 教程 in eclipse,并且保留了相同的包名,但是在其中添加了 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 选项卡中的包 > 选择 Refract > 选择 Rename...) ,然后在 AndroidManifest.xml 文件中和其他任何需要改变的地方(例如:。Java 文件)

这个错误也可能是一个愚蠢错误的终极标志(比如当我-我的意思是,咳嗽,比如当我的一个朋友曾经给我看过他们的代码) ,他们尝试在方法之外执行代码,比如尝试这样做:

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

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

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

要解决这个问题,只需将你的应用程序样式父类设置为像下面这样的 Theme.AppCompat。 :

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

此外,如果您使用当前活动中的 getIntent从另一个活动的 intent中检索某些内容,并在 onCreate之前/之上设置这些检索到的数据,那么将引发此异常。

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

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

并将这行代码放在 onCreate之前/之上,然后抛出这个异常。

右键单击 project > properties > android > ,尝试使用不同版本的 android,之前我使用 android 4.4,然后我改为 android 4.3,它工作了!

在我的例子中,我在项目中有两个版本的“ android-support-v4.jar”引用。在解决这个问题(删除附加/不正确的引用)之后,问题就解决了。

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

之前

activity android:name=".MainActivity"

之后

activity android:name="new_package.MainActivity"

简单地清理您的工作项目或重新启动 Eclipse。然后运行您的项目。它将工作。

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

第一个原因:

我正在访问

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

希望这个能帮上忙

在我的例子中,我试图嵌入 Facebook SDK,但是我得到了错误的 申请身份证,因此出现了错误。在清单文件中,应该有适当的元数据:

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

在我的例子中,我必须在 窗口 > > 首选项 > > Java > > 构建路径 > > 用户库 > > 添加库 > > 用户库 > > 新建中添加一个新的 Android 6.0库

将其命名为 Android 6.0,然后单击 OK

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

这可能与实际的问题无关,但是在我的例子中,我试图实现 Kotlin,但是遗漏了 apply plugin: 'kotlin-android'。发生错误是因为它无法将 MainActivity 识别为。KT 档案。

希望能帮到别人。

如果您已经安装了 AndroidStudio2.3.3和 AndroidStudio3.0.0,那么在两个开发程序之间切换将导致此错误。这是因为存在这样的情况: 一个程序中支持的类不受另一个程序的支持,反之亦然。在开发项目时使用哪个版本的 Android Studio 保持一致性非常重要。

正如 djjeck这个答案的评论中所建议的那样,我错过了在我的课上使用 public修饰语。

应该是的

public class MyActivity extends AppCompatActivity {

也许能帮到我这样的人。

我已经尝试了以上所有的解决方案,但没有一个适合我。之后,我刚刚添加 extend活动,而不是 AppCompatActivity和工作良好。

用过

public class MainActivity extends Activity

而不是

public class MainActivity extends AppCompatActivity

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

有时候 isMinifyEnabled = false可能会有帮助(确保在启动之前清理项目)

别这样

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

在我的例子中,我试图在活动调用 onCreate之前初始化组件(UI)。

确保在 setContentView之后的 onCreate方法中初始化/链接了 UI 组件

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

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

例如,您的应用程序 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
}

对我来说,它与上述任何一个都不同,

该活动被声明为抽象,这就是为什么给出错误。 一旦移除,它就起作用了。

早些时候

     public abstract class SampleActivity extends AppcompatActivity{
}

在移除之后

     public class SampleActivity extends AppcompatActivity{
}

有多少种方法可以得到这个错误。

我会再加一条,因为其他人都没有提出申请,或者都不是原因。

我在活动类的声明中忘记了“ 公众人士”! 它是私有包。

我已经写了太多的蓝牙代码,以至于我习惯性地创建一个私有包的活动类。

说明此错误消息的模糊性。

在我的例子中,我忘记将 MainActivity 类作为 公众人士

其他解决方案:

  1. 在 < strong > Manifest 文件中添加活动

  2. 验证所有 < strong > 访问修饰符

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

package com.my.package

确保 MainActivity 不是“抽象的”。

abstract class MainActivity : AppCompatActivity()

把抽象的东西拿掉

class MainActivity : AppCompatActivity() {

对于 颤抖应用程序。请确保在更改包名称后运行 飞得很干净摇摆的酒吧