我现在已经有这个问题差不多2个月了,无法弄明白。问题是,如果我的应用程序正在运行并且我从Eclipse运行(重新安装)我的应用程序,我会收到一条错误消息,指出我的应用程序崩溃了“不幸的是,已经停止了。”。我注意到当我将它从PC / Eclipse中运行时也会发生这种情况,我认为只有在我不运行它一段时间后才会发生。
仅当应用程序在第3个活动(BaseDiagramActivity
)中处于活动状态,然后我再次从Eclipse运行应用程序时才会出现此情况。除了3个活动之外,我基本上已经删除了所有应用程序,而且它仍在发生。
我搜索并搜索了这个问题的解决方案,但找不到任何合适的答案或适用于我的答案。
它似乎不是硬件或Android版本问题因为我在我的平板电脑(4.0.3)和我的手机(4.0.2,在更新之前发生在4.0.1上)运行它。除非它当然是一个冰淇淋夹心虫。
如果需要更多信息,请告诉我。
FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate application android.app.Application: java.lang.NullPointerException
at android.app.LoadedApk.makeApplication(LoadedApk.java:482)
at android.app.ActivityThread.handleBindApplication(ActivityThread.java:3938)
at android.app.ActivityThread.access$1300(ActivityThread.java:123)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1185)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4424)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at android.app.LoadedApk.initializeJavaContextClassLoader(LoadedApk.java:362)
at android.app.LoadedApk.getClassLoader(LoadedApk.java:305)
at android.app.LoadedApk.makeApplication(LoadedApk.java:474)
... 11 more
LoadedApk.initializeJavaContextClassLoader() - 第362行似乎是罪犯
以下是相关文件:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="[my package]"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name="HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="LoadDiagramActivity" android:label="Load Diagram"></activity>
<activity android:name="BaseDiagramActivity" android:label="Base Diagram"></activity>
</application>
</manifest>
public class HomeActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.home);
Button diagramButton = (Button)findViewById(R.id.diagram);
diagramButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
startActivity(new Intent(HomeActivity.this, LoadDiagramActivity.class));
}
});
}
}
public class LoadDiagramActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater menuInflater = getMenuInflater();
menuInflater.inflate(R.menu.load_diagram_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
finish();
return true;
case R.id.add_new_diagram:
startActivity(new Intent(this, BaseDiagramActivity.class));
return true;
default:
return super.onOptionsItemSelected(item);
}
}
}
实际上这是什么活动并不重要,只要启动“第三个”活动(或点击LoadDiagramActivity
上的添加按钮,就会发生异常。
public class BaseDiagramActivity extends Activity {
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/diagram"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Diagram" />
</LinearLayout>
当我删除我的项目以便提出更简单的答案时,我将所有内容都移到了包的命名空间中。在实际项目中有5个名称空间,当我使用精简版本进行测试时它们仍然存在但是没有被调用(据我所见)。
以下是包裹:
[package]
- 一般逻辑[package].activities
- 所有活动和基本活动[package].database
- 与数据库的所有互动[package].models
- 保存/加载数据的模型[package].renderables
- 绘制到画布的对象我试图在清单中添加一个`android:sharedUserId'属性,而且在我试过的时候似乎什么也没做。当我最初调查这个时,我得出结论,共享用户ID仅适用于不同的项目,而不是不同的包。
当我剥离所有内容时,我也不相信与数据库有任何交互。事实上,第三项活动可能是任何活动,甚至是HomeActivity,都是违反这一理论的。
最近几天我又回到了这个项目,我在Eclipse Juno中创建了一个全新的项目(之前是在Helios上)并且手动转移所有内容,以便Eclipse和Android工具几乎处理所有Manifest交互但是它还在发生。我会在接下来的几天里再看一下,如果发现任何事情我会更新。
仅供参考我的新项目针对以下内容:
<uses-sdk
android:minSdkVersion="14"
android:targetSdkVersion="15" />
新项目结构现在还包含根包中的所有活动(即[package],而不是[package] .activities)。我也使用(new?)语法来显示父活动:
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="[my package].LoadDiagramActivity" />
我现在更新的Galaxy Nexus仍在运行Jellybean 4.1.2。
答案 0 :(得分:9)
尝试在Manifest文件中再添加一个东西,我相信你已经尝试过..
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="[my package]"
android:versionCode="1"
android:versionName="1.0"
android:sharedUserId="com.mj.app" >
在您的项目中,您似乎有多个包,例如com.package.p1 , com.package.p2 ,com.package.p3
..
开始时你在p1
,然后转到p2 - p3
...
那时你试着再次运行它......所以Android会给你错误。
答案 1 :(得分:2)
如果您将13
放在minSdkVersion
中,它应该有效。
要么是这样,要么你需要在setDisplayHomeAsUpEnabled(false)
的其他活动中onCreate()
。
这些解决方案都应该有效。
根据documentation从API级别14开始,默认情况下不再为您执行setHomeButtonEnabled(true)
,并继续说明
设置DISPLAY_HOME_AS_UP显示选项将自动启用主页按钮。
因此,我们可以推断setDisplayHomeAsUpEnabled(false)
的工作方式与setHomeButtonEnabled(false)
答案 2 :(得分:2)
如果我没有记错的话,只有当我们从Eclipse Run-&gt; As重新安装应用程序时才会发生这种情况。因此,当用户通过Play升级时,这不太可能发生。我可以自信地说这个,因为在通过Eclipse重新安装期间我确实注意到我的应用程序这个例外,但在Crittercism上没有任何内容。
为了解决这个问题,我致力于解决我的应用程序的内存消耗问题。
bitmap.recycle(); bitmap = null;
以及所有System.exit(0)之前。 Android做了很多后台工作,重新安装是应用程序的突然清理期望。内存未清理可能会导致问题。此例外是internal
个例外之一。所以不要认为它是直截了当的。
答案 3 :(得分:0)
您尚未在清单android:name
属性中将活动名称添加到活动名称中。也许,这会导致问题。
答案 4 :(得分:0)
等待第二次运行应用程序崩溃后等待。应用程序将在崩溃后再次启动。这有时发生在我身上。如果情况与此相同,请不要忘记在每次运行之前清理项目。
答案 5 :(得分:0)
通过检查您的代码,我觉得您正在跳过在"setContentView(rid)"
中设置LoadDiagramActivity
。请尝试在onCreate()
中设置视图。
希望这会对你有所帮助。
答案 6 :(得分:0)
你需要追加“。”在activity
中的Menifest
名称之前。
喜欢这个
<?xml version="1.0" encoding="utf-8"?>
<uses-sdk android:minSdkVersion="14" />
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name" >
<activity
android:name=".HomeActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".LoadDiagramActivity" android:label="Load Diagram"></activity>
<activity android:name=".BaseDiagramActivity" android:label="Base Diagram"></activity>
</application>
我更新你的menifest的活动。请检查一下......
答案 7 :(得分:0)
到目前为止,您提供给我们的代码没有任何问题。我刚刚在一个名为com.test的软件包的新项目中尝试过,它运行得很完美。我在文件中添加的唯一内容是包声明。 (当然,我添加了load_diagram_menu.xml。)
如果可能的话,如果您能让我们访问完整的项目,那就太棒了。如果项目正在其他人的计算机上工作,那么Eclipse或Android Eclipse插件很可能是行为不端的。干净的Eclipse安装可以解决这个问题。 (虽然我知道如何离线会让这很困难。:-))
答案 8 :(得分:0)
为此,请务必进行&#34;自动构建&#34;清洁项目时检查。 (项目 - &gt;自动构建)