【问题标题】:java.lang.RuntimeException: Unable to instantiate activity ComponentInfojava.lang.RuntimeException:无法实例化活动 ComponentInfo
【发布时间】:2011-06-08 23:10:21
【问题描述】:

我试图运行示例代码 在 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 文件中添加所有活动。

【问题讨论】:

  • 感谢 Dan Breslau...现在看起来好多了..怎么做?
  • 对不起伙计们......对不起浪费了你的时间......我只是忘了将新类添加到清单文件中......
  • 更新我所有的工具(eclipse & sdk manager)为我修复了它,以及将android支持库添加到项目中
  • 我有这个问题,看这个stackoverflow.com/questions/30473270/…

标签: android


【解决方案1】:

确保 MainActivity 不是“抽象的”。

abstract class MainActivity : AppCompatActivity()

只需删除摘要

class MainActivity : AppCompatActivity() {

【讨论】:

    【解决方案2】:

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

    package com.my.package
    

    【讨论】:

      【解决方案3】:

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

      其他解决方案:

      1. 清单文件中添加活动

      2. 验证所有访问修饰符

      【讨论】:

        【解决方案4】:

        有很多方法可以得到这个错误!

        我将添加另一个,因为其他任何一个都没有应用或不是原因。

        我忘记了我的活动类声明中的“public”!它是包私有的。

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

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

        【讨论】:

          【解决方案5】:

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

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

          之前

               public abstract class SampleActivity extends AppcompatActivity{
               }
          

          删除后

               public class SampleActivity extends AppcompatActivity{
               }
          

          【讨论】:

            【解决方案6】:

            当您在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
                }
            

            【讨论】:

              【解决方案7】:

              在我的例子中,我什至在为 Activity 调用 onCreate 之前尝试初始化组件(UI)。

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

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

              【讨论】:

              • 谢谢。我很困惑为什么会收到此错误。 :(
              【解决方案8】:

              别这样

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

              【讨论】:

                【解决方案9】:

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

                【讨论】:

                  【解决方案10】:

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

                  二手

                  public class MainActivity extends Activity  
                  

                  而不是

                  public class MainActivity extends AppCompatActivity 
                  

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

                  【讨论】:

                    【解决方案11】:

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

                    应该是

                    public class MyActivity extends AppCompatActivity {
                    

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

                    【讨论】:

                      【解决方案12】:

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

                      【讨论】:

                        【解决方案13】:

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

                        希望对某人有所帮助。

                        【讨论】:

                        • 还在主 build.gradle 中添加 classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$KOTLIN_VERSION
                        【解决方案14】:

                        就我而言,我必须通过转到 Window >> Preferences >> Java >> Build Path >> User Libraries >> Add Library >> User Library >> New 添加一个新的 Android 6.0 库 em>

                        将其命名为 Android 6.0,然后单击“确定”。之后,添加您可以在“sdklocation/platforms/android-23/android.jar”中找到的 android.jar 文件

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

                        【讨论】:

                          【解决方案15】:

                          就我而言,我试图嵌入Facebook SDK,但我的应用程序ID有误;因此错误弹出。在您的清单文件中,您应该有正确的元数据:

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

                          【讨论】:

                            【解决方案16】:

                            我遇到了同样的问题(无法实例化 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" />
                            

                            希望对你有帮助

                            【讨论】:

                              【解决方案17】:

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

                              之前

                              activity android:name=".MainActivity" 
                              

                              之后

                              activity android:name="new_package.MainActivity"
                              

                              【讨论】:

                              • 谢谢。就是这样。
                              【解决方案18】:

                              大多数情况下,如果 Activity 名称更改会反映在整个项目中,除了 AndroidManifest.xml 文件。

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

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

                              【讨论】:

                                【解决方案19】:

                                这是你 Intent 的问题。

                                请将您的Activity 添加到您的AndroidManifest.xml

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

                                【讨论】:

                                • 我有一个类不扩展活动,只包含一些常用功能;但我仍然得到这个例外;为什么?
                                • 在我的项目中,它说在查看 xml 文件中的 android:name 时该类不公开。当我在主要活动中添加 public before class 时,应用程序运行没有问题。很奇怪。
                                • 我在开发的本机应用程序中遇到了这个问题。我在活动类中添加了另一个方法,我开始收到这个错误。对我来说,一个干净的 + 重建解决了它。
                                • 另一种选择是您的活动在清单中,但它被声明为abstract(我在重构过程中犯了这个错误,错误消息没有多大帮助)。
                                • 我该怎么做?
                                【解决方案20】:

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

                                【讨论】:

                                • 哇,谢谢。你是救生员。这很愚蠢,但非常感谢。它已经困扰我一个星期了。
                                • 犯了同样的错误 ;)
                                • 这里也有同样的错误。谢谢
                                【解决方案21】:

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

                                【讨论】:

                                  【解决方案22】:

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

                                  【讨论】:

                                  • 这种情况发生了很多次...现在它无法解析 IADL 文件,这可能是问题的根源,并且 eclipse 正在基于旧文件进行编译...所以记得清理,重启,编译kids...
                                  【解决方案23】:

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

                                  【讨论】:

                                    【解决方案24】:

                                    右键单击项目 > 属性 > android > 并尝试使用不同版本的 android 之前我使用 android 4.4 然后我更改为 android 4.3 并且它工作!

                                    【讨论】:

                                      【解决方案25】:

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

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

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

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

                                      【讨论】:

                                        【解决方案26】:

                                        当您使用 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。
                                        【解决方案27】:

                                        这个错误也可能是一个愚蠢错误的最终迹象(比如当我 - 我的意思是,咳嗽,比如当我的一个朋友向我展示过他们的代码时)他们试图在方法之外执行代码,比如尝试这样做:

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

                                        【讨论】:

                                        • 巨大的帮助。解决了我的问题并引导我创建了我的第一个功能齐全的 android 应用
                                        【解决方案28】:

                                        就我而言,我忘了添加谷歌地图库

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

                                        另外,请检查您是否缺少活动路径之前的前一个点

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

                                        【讨论】:

                                        • 谢谢你,@Maragues !这是同一个问题!你解决了我的问题。 :)
                                        【解决方案29】:

                                        如果您有两个具有相同包名的项目并且您在另一个之前运行其中一个项目,也会发生这种情况,所以我猜它会混淆 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 选项卡中的包 > 选择 Refractor > 选择 Rename...),然后在您的 AndroidManifest.xml 文件和您需要的任何其他地方更改它(例如就像你所有的 .java 文件一样)

                                        【讨论】:

                                          【解决方案30】:

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

                                          【讨论】:

                                          • 重要的是看到这个问题,并正确尝试每个依赖组件。例如,在 Android Studio(或 Intellij IDEA)上,为依赖项选择正确的范围(Provided、Compile,...)。就我而言,将提供的更改为编译并正常工作。
                                          猜你喜欢
                                          • 2016-11-17
                                          • 2015-03-04
                                          • 2013-04-12
                                          • 2013-09-03
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 1970-01-01
                                          相关资源
                                          最近更新 更多