3

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)行:2494
ActivityThread.handleLaunchActivity(ActivityThread $ ActivityRecord、Intent)行:2512
ActivityThread.access $ 2200(ActivityThread、ActivityThread $ ActivityRecord、Intent)行:119
ActivityThread $ H.handleMessage(Message)行:1863
ActivityThread $ H(Handler).dispatchMessage(Message)行:99 Looper.loop()行:123
ActivityThread.main(String [])行:4363 Method.invokeNative( Object、Object []、Class、Class []、Class、int、boolean)行:使用不可[ネイティブメソッド] Method.invoke(Object、Object ...)行:521
ZygoteInit $ MethodAndArgsCaller.run()行:860 ZygoteInit.main(String [])行:618 NativeStart.main(String [])行:使用不可[ネイティブメソッド]

getDefaultSharedPreferences()に渡されるパラメーターのバリエーションを試しました。これには、次のものが含まれます。

SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

...そしておそらく別のコンテキストにある他のいくつか(つまり、メインアクティビティから別のアクティビティvs.アクティビティではないクラスの関数にアクセスする場合。結果は常に同じです。

私と同じコードを書くことで問題を解決したこの問題を抱えている他の人からのWeb上のQ&A投稿を十数回読んだので、解決策があるとは思いませんが、誰かアイデアがあれば教えてください。

4

3 に答える 3

8

スタック トレースを表示しません。これThread [<3> main] (Suspended)は、Eclipse からの役に立たない出力です。実際のスタック トレースを調べる必要があります。これは、Android が [強制終了] ダイアログに進むことを許可し、スタック トレースの LogCat (DDMS パースペクティブ) を確認することで得られるはずです。

私の推測では、名前付きの設定がありますが、intSettingそれは整数ではありませんが、それは単なる推測です. Preferenceほとんどの場合、文字列を格納するため、整数設定を格納する組み込みクラスは思い浮かびません。

SharedPreferences( を使用して)デフォルトにアクセスする方法thisは正しいので、変更する必要はありません。

これは、バックの使用PreferenceActivityと取得を示すサンプル プロジェクトです。SharedPreferences

于 2010-08-16T21:46:10.230 に答える
0

設定が保存されていなくても、クラッシュすることはありません。コードを見逃していて、クラッシュはこの時点から発生していないと思います。他のスレッドはありますか?

于 2010-08-16T23:12:42.297 に答える
0

念のため:

  • あなたには、次のようなもので拡張されAndroidManifestた が必要です。ActivityPreferenceActivity

    < アクティビティ android:name=".activities.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 が問題を再現できるようにしてください。

于 2010-08-16T21:45:25.493 に答える