1

この質問は以前に尋ねられたことがありましたが、提供された回答はどれもうまくいきませんでした。

したがって、A と B の 2 つのアクティビティがあります。ユーザーは A にデータを挿入し、B からそれらにアクセスできるようにしたいと考えています (将来的にはさらに多くのアクティビティ)。私は共有設定を使用してそれをやろうとしています。現在、コードはアクティビティ A にデータを正しく保存できるようですが、オブジェクト (アクティビティ B) が空であるため、アクティビティ B から同じ sharedPreference にアクセスできません。同じ名前の別のオブジェクトを作成しているようです。

私はAndroidとJavaに非常に慣れていないので、おそらくこのクラスがどのように機能するかを理解していないだけだと思います.何が間違っているのでしょうか?

活動A

SharedPreferences sharedPref = this.getSharedPreferences("PREF_PERSONAL_DATA",Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();

editor.putInt(getString(R.string.n),n);
editor.putInt(getString(R.string.hi), hi);
editor.putInt(getString(R.string.wa), wa);
editor.putInt(getString(R.string.he), he);
editor.putInt(getString(R.string.we), we);
editor.putInt(BlocksNumStr, BlocksNum);
editor.commit();

アクティビティ B

SharedPreferences sharedPref = this.getSharedPreferences("PREF_PERSONAL_DATA", Context.MODE_PRIVATE);

String Weight = sharedPref.getString("we", null);
int W = sharedPref.getInt("weight", 0);

TextView ShowWeight = (TextView) findViewById(R.id.attempt);
ShowWeight.setText(Weight);
TextView ShowW = (TextView) findViewById(R.id.attemptW);
ShowW.setText(W);
4

4 に答える 4

1

Android には、次の 3 種類のアクセスが用意されていSharedPreferencesます。

  1. Activity.getPreferences()- アクティビティ固有の設定にアクセスします。これは、あなたのケースでは ActivityA または ActivityB に対してのみ有効です。
  2. Activity.getSharedPreferences()またはContext.getSharedPreferencesアクティビティにない場合 - アプリケーションレベルの設定にアクセスします。これらの設定は、アプリケーション内のどこにでも表示されます。
    1. PreferenceManager.getDefaultSharedPreferences()- Android にインストールされているすべてのアプリケーションに表示されるグローバルな共有設定にアクセスします。

投稿した例から、を使用しているため、すべてが正しいようですgetSharedPreferences()。私がチェックすることは次のとおりです。

  1. Stringプリファレンスの取得にリソースからの同じキーが使用されているかどうかを確認します。
  2. commit()メソッドが設定のバッチの書き込みを中断しないかどうかを確認します。個人的には、commit()メソッドの使用時に設定が保存されないという問題がいくつか発生しました。Android Honeycomb からapply()メソッドがあります。との違いはcommit()apply()commit()実行中のスレッドの設定を保存するのに対し、apply()非同期で動作することです。Honeycomb 以前のバージョンに依存していない場合は、 の使用を検討してapply()ください。
于 2016-01-26T21:51:06.660 に答える
0

活動A:

SharedPreferences sharedPref =     getBaseContext().getSharedPreferences("PREF_PERSONAL_DATA",getBaseContext().MODE_PRIVATE);
    SharedPreferences.Editor editor = sharedPref.edit();

editor.putInt(getString(R.string.n),n);
editor.putInt(getString(R.string.hi), hi);
editor.putInt(getString(R.string.wa), wa);
editor.putInt(getString(R.string.he), he);
editor.putInt(getString(R.string.we), we);
editor.putInt(BlocksNumStr, BlocksNum);
editor.commit();

アクティビティ B :

SharedPreferences sharedPref = getBaseContext().getSharedPreferences("PREF_PERSONAL_DATA", getBaseContext().MODE_PRIVATE);

String Weight = sharedPref.getString(getString(R.string.wa), null);
int W = sharedPref.getInt("weight", 0);

TextView ShowWeight = (TextView) findViewById(R.id.attempt);
ShowWeight.setText(Weight);
TextView ShowW = (TextView) findViewById(R.id.attemptW);
ShowW.setText(W);
于 2016-01-26T21:19:05.467 に答える
0

同じ共有設定インスタンスを使用していることを確認する最も安全な方法は、

getDefaultSharedPreferences(Context context)

最初にこれらを 2 つのアクティビティ A と B に追加します

プライベート SharedPreference mSharedPreference; プライベート SharedPreference.Editor mEditor;

そのように onCreate でそれらを開始します。

mSharedPreference = PreferenceManager.getDefaultSharedPreferences(this);
mEditor = mSharedPreference.edit();

sharedPreference に保存するには、次のようにします。

mEditor.put("KEY",variableToSave);
mEditor.apply();

to read (アクティビティ B): //以前に保存した文字列を読み取る (たとえば...)

String readVariable = mSharedPreferences.getString("KEY","DEAULT_VALUE");

デフォルトの共有設定を使用すると、アプリ全体のファイルにアクセスできます。そのため、どこでも (アクティビティ A または B で) エディターを使用して保存した変数にアクセスできます。

于 2016-01-26T21:15:37.083 に答える