優先反応性によって作成された設定にアクセスできません
-
29-09-2019 - |
質問
Androidを使用して2つの設定(intとstring)を設定させる以外に、最小限のプログラムがあります。 PreferenceActivity
. 。だから私は自分の好みを定義するXMLファイルと、拡張するアクティビティを持っています PreferenceActivity
. 。私の主なアクティビティには、優先活動を起動するオプションメニューがあります。そのすべてがうまく機能します。設定を設定することができ、プログラムの実行中と実行後に値が保持されます。
さて、私の主な活動では、それらの好みを取得したいと思います。簡単でなければなりませんよね?これが私が今まで見たすべてのサンプルのコードです:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
int intSetting = prefs.getInt("intSetting", 0);
String strSetting = prefs.getString("strSetting", "");
問題は、私がで壊れた場合です getInt()
電話とステップオーバー、私のスタックはこのように見え、私が続けるとアプリはクラッシュします:
スレッド[<3>メイン](中断)
ActivityThread.PerformLaunchActivity(ActivityThread $ ActivityRecord、Intent)Line:2494
ActivityThread.HandleLaunchActivity(ActivityThread $ ActivityRecord、Intent)Line:2512
ActivityThread.Access $ 2200(ActivityThread、ActivityThread $ ActivityRecord、Intent)行:119
ActivityThread $ H.HandleMessage(メッセージ)行:1863
ActivityThread $ h(ハンドラー).dispatchmessage(message)Line:99 looper.loop()line:123
ActivityThread.Main(String [])Line:4363 Method.Invokenivative(Object、Object []、class、class []、class、int、boolean)行:使用できない[native method] method.invoke(object、object .. 。)行:521
zygoteinit $ methodandargscaller.run()line:860 zygoteinit.main(string [])line:618 nativestart.main(string [])line:not vayable [native method
getDefaultSharedPreferences()に渡されたパラメーターでバリエーションを試しました。
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
...そしておそらく異なるコンテキストで他の一部(つまり、私のメインアクティビティと別のアクティビティからの好みにアクセスする場合、アクティビティではないクラスの何らかの関数。結果は常に同じです。
私は、私と同じコードを書くことでそれを解決したこの問題を抱えている他の人からウェブ上の数十のQ&A投稿を読んだので、解決策があるとは思いませんが、誰かがアイデアを持っているなら、私に知らせてください。
解決
スタックトレースは表示されません。 Thread [<3> main] (Suspended)
Eclipseからの役に立たない出力です。 Androidが「Force Close」ダイアログに続くことを許可し、スタックトレースのLogCat(DDMSの観点から)を調べることで、実際のスタックトレースを調べる必要があります。
私の推測では、あなたは名前が付けられているということです intSetting
しかし、それは整数ではありませんが、それは単なる推測です。カフから外れて、私は組み込みのどれも考えられません Preference
整数の好みを保存するクラスは、主に文字列を保存するためです。
デフォルトにアクセスする方法 SharedPreferences
(使用 this
)正しいので、変更する必要はありません。
これがサンプルプロジェクトです の使用を示しています PreferenceActivity
そして、取得します SharedPreferences
戻る。
他のヒント
念のため:
あなたに
AndroidManifest
あなたが持っているはずですActivity
それは拡張されますPreferenceActivity
このようなもので:<アクティビティAndroid:name = "。アクティビティ.preferences" android:label = "@string/app_name"/>
Activity
それは拡張されますPreferenceActivity
次のコードが必要です。@Override Protected void oncreate(bundle savedinstancestate){super.oncreate(savedinstancestate); addpreferencesfromresource(r.layout.prefs); }
どこ R.layout.prefs
あなたの好みのXMLです。
両方のことを行った場合は、使用しているXMLで質問を編集してください。PPLが問題を再現できるようにしてください。
あなたの好みが保存されていなくても、それはクラッシュしません、私はあなたがいくつかのコードを見逃し、クラッシュはこの時点から来ないと思います。他にもいくつかのスレッドはありますか?