我试图运行示例代码 在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文件中添加所有活动。
答案 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)
这也是因为这个问题。我取消选中需要导出到apk的罐子,同样的事情发生了。请勾选你的应用需要运行的罐子。
答案 5 :(得分:15)
我也遇到了这个问题,但方式略有不同。这是我的情景:
应用详情:
<uses-library android:name="com.google.android.maps" />
包含在图书馆项目和我的主要项目的清单中(图书馆可能没有必要这样做吗?)但是,我仍然遇到了原帖中描述的错误,无法让它消失。但问题在于一方面略有不同:
我如何解决它:
仅此步骤无法解决问题
将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)
我通过删除项目中的Bin
和Gen
文件夹(项目将在构建时自动返回)然后从 - &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)
正如djjeck
在this回答评论中所建议的那样,我错过了为我的班级添加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类设为公开。
其他解决方案:
在清单文件
中添加活动验证所有访问修饰符
答案 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
当您打开它时,请清理项目,然后运行 它对我有用.....
此问题是由于更改了应用程序的软件包名称 我已经遇到了这个问题 当我没有解决方案时,我会很生气,然后关闭该项目,然后我想,为什么不尝试其他方法……。那么我的项目就可以工作了……