0

これに関するすべてのスレッドを見つけましたが、ファイルが見つからない理由を実際に説明しているものはありませんでした。そのため、コードで再試行しています。これをデバッガーの LG Spectrum で実行しました。私が見つけることができるファイルが作成されていないことを除いて、すべて正常に動作し、さらに、私が書いた名前/値のペアを読み取ることができません。

package com.example.locdir;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.content.SharedPreferences;
import android.content.Context;

public class MainActivity extends Activity {

int testint = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    setup();
    readback();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

private void setup() {
    SharedPreferences sharedPref = getSharedPreferences(
            getString(R.string.preference_file_key), Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();
    editor.putInt("testint", 475);
    editor.commit();        
}

private void readback() {
    SharedPreferences sharedPref = getSharedPreferences(
            getString(R.string.preference_file_key), Context.MODE_PRIVATE);
    int testint = sharedPref.getInt("testint", 0);
}
}

デバッガの動作によると、うまくいきます。sharedPref.mFile.path の値は「/data/data/com.example.locdir/shared_prefs/locdir_pref.xml」です。

実行後、このパスにこの名前のファイルはありません。

readback メソッドが呼び出されて getInt が発生したとき、testint はまだ 0 です。

私が見ることができるログの苦情はありませんでした。

ああ、sharedPref.apply() も試しました。同じこと。

4

2 に答える 2

1

int testint = 0クラスの先頭で変数を宣言しています。その行を削除すると、すべて正常に動作するはずです。

public class MainActivity extends Activity {

int testint = 0; // REMOVE THIS LINE
于 2013-06-11T01:55:16.110 に答える
0

どこでtestintを監視しましたか。それが onCreate() メソッドにある場合は、testint をグローバル変数として定義し、0 で初期化しているため、何があっても 0 になり
ます。次のようにコードを変更します。

private void readback() {
    SharedPreferences sharedPref = getSharedPreferences(
            getString(R.string.preference_file_key), Context.MODE_PRIVATE);
    testint = sharedPref.getInt("testint", 0); // remove int
}
}
于 2013-06-11T02:45:22.163 に答える