0

私の問題:sharedPreferenceを保存してアプリを再起動したい場合、正しい値が読み込まれません..私のコード:

int punkteint = 0;
TextView test1;
String points;
private static String SHARED_PREF_ID = "0";

public void onCreate(Bundle savedInstanceState) {
    test1 = (TextView) findViewById(R.id.test1);
    SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, 0);
    points = load.getString("punkte", "0");
    points = SHARED_PREF_ID;
    test1.setText(points);
    mehrPunkte();
    }


public void mehrPunkte() {

    punkteint++;

    SHARED_PREF_ID = Integer.toString(punkteint);
    SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);
    points = load.getString("punkte", "0");
    points = SHARED_PREF_ID;
    test1.setText(points);

    SharedPreferences save = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);
    save.edit().putString("punkte", SHARED_PREF_ID).commit();
}

ここで何が間違っていましたか?あなたが私を助けてくれることを願っています

4

4 に答える 4

1

この行:

save.edit().putString("punkte", SHARED_PREF_ID).commit();

punkte の値として SHARED_PREF_ID を保存しています。したがって、常に 0 になります。

save.edit().putString("punkte", String.valueOf(punkteint)).commit();

または多分:

save.edit().putString("punkte", String.valueOf(points)).commit();

あなたが実際に何を保存しようとしているのかわかりません。

ああ、共有設定から値を取得するとすぐに値をリセットしています:

points = load.getString("punkte", "0");
points = SHARED_PREF_ID;

2 行目は実行しないでください。

于 2012-07-27T19:15:55.307 に答える
1

ここで何をしようとしているのかわからない:

points = load.getString("punkte", "0");
points = SHARED_PREF_ID;
test1.setText(points);

基本的に、あなたがやるように言ったことは、punkte「 の値をにロードしてpointsから、 にロードSHARED_PREF_IDするpoints」ということです。つまり、points常にここと等しいということSHARED_PREF_IDです。「 」という行を削除するpoints = SHARED_PREF_ID;と、おそらくより多くの成功が得られます。

SHARED_PREF_IDさらに、の値を変更しません。にして、final String一意の値 ( など"punkte_prefs") を付けます。

最後に、素晴らしい例を含むドキュメントと、@Kaediil の回答 (私が見逃していたものを見つけたので...) を確認します。

于 2012-07-27T19:17:19.127 に答える
0

わからない。あなたの行動はうまくいくはずですが、代わりにこれを使用します

SharedPreferences.Editor prefEditor = save.edit();
prefEditor.putString("blah", blah);
PredEditor.commit()

onPause で保存し、onResume で読み込みます。データがアクティビティを通じて変更されることを意図している場合に役立ちます。

于 2012-07-27T19:15:05.240 に答える
0

私はあなたがここですべてねじれてしまったと思います。

  private static String SHARED_PREF_ID = "0";
  ...
  SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, 0);
  points = load.getString("punkte", "0");
  points = SHARED_PREF_ID;

これらの行は、「0」という名前のファイルから共有設定を読み取ります。それはあなたが望んでいたものですか?これはあまり役に立たないファイル名です。次の行は、"punkte" という名前の文字列値を変数 "points" に読み取り、すぐにその値を破棄して "0" に置き換えます。

punkteint++;
SHARED_PREF_ID = Integer.toString(punkteint);
SharedPreferences load = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);

これらの行はカウンターをインクリメントし、それを使用してまったく新しいファイル名を生成し、そのファイルからまったく新しい設定のセットをロードします。繰り返しますが、これらの設定から「ポイント」をロードし、すぐに値を破棄して、この新しいファイル名に設定します。

SharedPreferences save = getSharedPreferences(SHARED_PREF_ID, MODE_PRIVATE);
save.edit().putString("punkte", SHARED_PREF_ID).commit();

これらの行は、その新しいファイルから設定を再度読み込み、ファイル名を「punkte」値に書き込みます。

一連の設定ファイルを意図的に生成しているように見えます。各ファイルには、値「punkte」の下に独自の名前が含まれています。

次にアプリを実行すると、ファイル「0」からの設定の読み取りに戻り、最初に取得したのと同じ値「0」を取得します。

実際に何をしようとしているのか教えていただけると助かります。

于 2012-07-28T02:05:35.047 に答える