私はこの問題を2か月近く抱えていますが、理解できません。問題は、アプリケーションが実行されていて、Eclipseからアプリケーションを実行(再インストール)すると、アプリケーションがクラッシュしたことを示すエラーメッセージが表示されることです。「残念ながら、停止しました。」 PC/Eclipseから実行した場合にも発生することに気付きましたが、しばらく実行しなかった場合にのみ発生すると思います。
これは、アプリが3番目のアクティビティ(BaseDiagramActivity
)でアクティブであり、Eclipseからアプリを再度実行した場合にのみ発生します。私は基本的に3つのアクティビティを除くすべてのアプリケーションを削除しましたが、それはまだ発生しています。
私はこの問題の解決策を探して探しましたが、良い答えや私に当てはまるものが見つかりません。
タブレット(4.0.3)と電話(4.0.2、以前は4.0.1で発生していました)でこれを実行しているため、ハードウェアまたはAndroidバージョンの問題のようには見えません更新)もちろん、それがアイスクリームサンドイッチのバグでない限り。
さらに情報が必要な場合はお知らせください。
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);
}
}
}
これが実際にどのアクティビティであるかは関係ありません。例外は、「3番目の」アクティビティが開始される(または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は異なるプロジェクトにのみ適用され、異なるパッケージには適用されないという結論に達しました。
また、すべてを取り除いたときにデータベースとの相互作用があったとは思わない。 3番目のアクティビティがHomeActivityであっても、任意のアクティビティである可能性があるという事実は、この理論に反するものでした。
この数日間、このプロジェクトに戻って、Eclipse Junoで新しいプロジェクトを作成し(以前はHeliosにありました)、EclipseとAndroidツールがほぼ処理されるようにすべてを手動で転送しました)マニフェストのすべてのインタラクションですが、まだ発生しています。今後数日間でもう少し詳しく調べ、何か見つかった場合は更新します。
参考までに、私の新しいプロジェクトは以下を対象としています。
<uses-sdk
Android:minSdkVersion="14"
Android:targetSdkVersion="15" />
新しいプロジェクト構造には、ルートパッケージ内のすべてのアクティビティも含まれています(つまり、[package] .activitiesではなく[package])。また、(新しい?)構文を使用して親アクティビティを表示しています:
<meta-data
Android:name="Android.support.PARENT_ACTIVITY"
Android:value="[my package].LoadDiagramActivity" />
これは、Jellybean4.1.2を実行している現在更新されているGalaxyNexusでも引き続き発生しています。
マニフェストファイルにもう1つ追加してみてください。すでに試していると思いますが、.
<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エラー。
私が間違っていない場合、これはEclipse Run-> Asからアプリを再インストールしたときにのみ発生します。したがって、ユーザーがPlayを介してアップグレードするときに、これが発生する可能性はほとんどありません。 Eclipseを介した再インストール中にこの例外を除いてアプリにも気付いたので、自信を持ってこれを言うことができますが、Crittercismについては何もありません。
これを修正するために、アプリのメモリ消費の解決に取り組みました。
bitmap.recycle(); bitmap = null;
を忘れないでください。Androidは多くのバックグラウンド作業を行い、再インストールはアプリからの突然のクリーンアップの期待です。クリーンアップされていないメモリは問題を引き起こす可能性があります。この例外は、それらのinternal
の例外の1つです。ですから、それが単純だとは思わないでください。
minSdkVersion
に_13
_を入れると、機能するはずです。
それか、他のアクティビティのsetDisplayHomeAsUpEnabled(false)
でonCreate()
する必要があります。
これらのソリューションは両方とも機能するはずです。
documentation によるとAPIレベル14から、setHomeButtonEnabled(true)
はデフォルトで実行されなくなり、さらに次のようになります。
DISPLAY_HOME_AS_UP表示オプションを設定すると、ホームボタンが自動的に有効になります。
したがって、setDisplayHomeAsUpEnabled(false)
はsetHomeButtonEnabled(false)
と同じように機能すると推測できます。
アプリケーションを2回実行するときに、アプリケーションがクラッシュするまで待ちます。再びクラッシュした後、アプリが起動します。これは時々私に起こります。同じことがuの場合でも、実行する前に毎回プロジェクトをクリーンアップすることを忘れないでください。
コードを調べると、LoadDiagramActivity
に"setContentView(rid)"
を設定するのをスキップしているように感じます。 onCreate()
でビューを設定してみてください。
これがお役に立てば幸いです。
このため、プロジェクトをクリーンアップするときは、必ず「自動ビルド」をチェックしてください。 (プロジェクト->自動ビルド)
これまでに提供してくれたコードに問題はありません。パッケージ名com.testの新しいプロジェクトで試してみたところ、問題なく動作しました。私がファイルに追加したのはパッケージ宣言だけでした。 (もちろん、load_diagram_menu.xmlを追加しました。)
可能であれば、プロジェクト全体へのアクセスを提供していただければ幸いです。プロジェクトが他の誰かのコンピューターで動作している場合は、EclipseまたはAndroid Eclipseプラグイン-誤動作している可能性があります。Eclipseをクリーンインストールすると解決します(オフラインの方法は理解していますが)これを難しくする可能性があります。:-))
「。」を追加する必要があります。 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>
私はあなたのメニフェストの活動を更新します。これをチェックしてください...
マニフェストのアクティビティの名前にピリオドを追加していません Android:name
属性。おそらく、これが問題の原因です。