1

アプリでアクティビティをテストすると、PreferenceActivityを使用して設定した値を使用していないことがわかります。

値がPrefsActivityで(少なくとも「ローカルに」)正しく設定されていることを確認できます。これは、開くたびに、前回閉じたときとまったく同じ設定になっているためです...

設定を保存する設定ファイルをPreferenceActivityで指定する必要がありますか、それともアクティビティで使用するためにそれらの値をインポートするために使用しているメソッドに問題がありますか?その質問に対する明確な答えを見つけることなく、Web全体を検索したような気がします...

これは私のアクティビティが設定をロードすることになっている場所です、それは正しく見えますか?デバッグモードで実行し、使用する値を手動で入力すると、計算が正常に機能するため、これが唯一の欠落していることを知っています...

public void OnStart() {
    // Loads the values for the calculator to use
    SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
       bodymass = settings.getInt(getString(R.string.pref_key_user_mass).toString(), 0);
       gender = settings.getString(getString(R.string.pref_key_user_gender).toString(), "");

また、この次のコードはあなたにとって正しいように見えますか?(誰かが一度に複数の変数を比較する「if」ステートメントを作成する方法を教えてくれたら、私も感謝します-たとえば、if(3つのフィールドのうちの1つが空です){何かをする})

    //Checks defined user gender and sets value to be used by calc accordingly
    if (gender == "male") {
        genderValue = 0.7;
    }
    else if (gender == "female") {
        genderValue = 0.6;
    }
    else if (gender == "") {
        settingsAlert();
    }

すべてのアプリデータがワイプされた場合でも、settingsAlert()関数がトリガーされることはないようです(アラートメッセージが生成され、使用する前にユーザーに設定を設定するように求められますが、何も起こりません)

アラートを生成することになっているコードは次のとおりです。

public void settingsAlert() {
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("@string/dialog_setPrefs_text")
           .setCancelable(false)
           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                   Intent gotoSettings = new Intent(ActivityCalc.this, ActivitySettings.class); 
                   startActivity(gotoSettings);
               }
           })
           .setNegativeButton("No", new DialogInterface.OnClickListener() {
               public void onClick(DialogInterface dialog, int id) {
                    finish();
               }
           })
           .create();
}

- アップデート -

これで、アラートダイアログが正常に生成されるようになりました。それを実現したコード行を投稿して、同じ問題を抱えている他のユーザーが監視および学習できるようにすることにしました... :)

問題は、アラートが実際に正しく作成されたが、実際に表示するように呼び出されなかったことであるように見えました。したがって、最後の行の少し.show()後に追加すると、すべてが完全に機能しました。.create()

または、AlertDialogオブジェクトとして定義し、必要に応じて呼び出すこともできます。

    AlertDialog alert = builder.create();
    alert.show();

PreferenceActivityクラスの内容をここに投稿します。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // This line will import the preferences to display in the settings activity
    addPreferencesFromResource(R.xml.settings);
}

設定リソースファイルを作成する方法については、この記事を参照してください

代わりにDefaultSharedPreferencesを使用するようにget-methodを変更したため、使用する共有設定の名前を指定するための文字列を含めなくなりました。

SharedPreferences settings = PreferenceManager.getDefaultSharedPreferences(getBaseContext());

これで、残りのアクティビティで永続化するために必要な変数のみを定義して初期化しました。

private double genderValue = 0;
private String gender = "";
private int bodymass = 0;

アプリは正常に動作するようになりました。クラッシュせず、PreferenceActivityで設定された設定が正しく読み込まれます。

4

1 に答える 1

1

IF-ELSE文にはequalsを使用する必要があります

if (gender.equals("male")) { //equals
    genderValue = 0.7;
}
else if (gender.equalsIgnoreCase("female")) { //Here the equalsIgnorecase one
    genderValue = 0.6;
}
else if (gender == "") {
    settingsAlert();
} else {
    settingsAlert();  //Probably it always comes here.
}

別のこと..「コミット」で設定を正しく保存しましたか?

  settings.edit().putString(getString(R.string.pref_key_user_gender).toString(), gender).commit();

--3番目のコメントの後---

試したことがありません。それぞれに1つは正常に機能します。しかし、「duanhong169」コメントをチェックすると、putStringの後に2つあり、最後にコミットされたので、試してみてください:)とにかくあなたはただ行うことができます:

SharedPreferences.Editor editor = settings.edit();
editor.putString("gender", genderValue);
editor.putInt("bodymass", bodymassValue);
editor.commit();

そして、あなたの他の質問に答える..あなたは好みを保存するために「編集」が必要です、それがどのように機能するかです。onpause、onrestart、または必要なデータを取得した直後(メソッド内)で使用できます。つまり、ログインデータが必要な場合、ログインが正しいことを確認した後、別のログインパス値が保存されている場合(別のユーザー)、edit.putStringを使用して、onResult確認内に新しい値を保存できます。

より良い方法は、さまざまなタグを使用して設定に保存するさまざまな方法を試し、ログを作成して各タグからgetString()を実行することです。これにより、どちらが機能するかがわかり、より適切で簡単なものを選択できます。あなたの場合。

-更新2-

私の知る限りでは..(私はそれを試したことがなく、あなたと同じように、私はAndroidを初めて使用します)、preferences.xmlをres / xmlに配置してから、次のようにします。

public class PreferencesFromXml extends PreferenceActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // Load the preferences from an XML resource
        addPreferencesFromResource(R.xml.preferences);
    }
}

データを取得するには:

PreferenceManager.setDefaultValues(this, R.xml.prefer, false);
SharedPreferences p = PreferenceManager.getDefaultSharedPreferences(this); 
p.getString("key", "value_default")
于 2012-04-23T12:02:55.030 に答える