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)
方法中设置这个。
我多次犯了这个愚蠢的错误。
我通过从项目中删除Bin
和Gen
文件夹(当项目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被抛出。