0

こんにちは、アプリに 3 つのアクティビティがあり、インテントを使用してそれらの間でデータを転送します。私が遭遇した問題は、3 つのアクティビティからメイン アクティビティに戻ったときに、メイン アクティビティにある共有設定が変更されることです。問題は私の意図が再起動することだと思いますが、よくわかりません。3 アクティビティに移動したときと同じデータを取得しようとしています。私のアプリはアクティビティ1で開始し、メインアクティビティに移動し、最後にボタンをクリックすると3番目のアクティビティに移動し、データを取得してメインアクティビティに戻ります私が抱えている問題は、最初のアクティビティから取得したデータです3番目のアクティビティから戻ったときに再起動します。アクティビティ間でデータを移動するときは、インテントを使用します。

インテントアクティビティ1を転送するための私のコード:

        Bundle CIW = new Bundle();
    CIW.putInt("one", int1);
    CIW.putInt("two", int2);
    CIW.putDouble("double", double);
    Intent a = new Intent(Must.this, Main.class);
    a.putExtras(CIW);
    startActivity(a);

私のメインアクティビティでバンドルを取得するための私のコード(作成メソッドの私のものです):

            Intent must = getIntent();
        Intent name = getIntent();
        Bundle CIW = must.getExtras();
        Bundle card = name.getExtras();
        int1 = CIW.getInt("one");
        int2 = CIW.getInt("two");
        double= CIW.getDouble("double");
        int3 = card.getInt("three");

私の共有設定コード(一時停止中):

            SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());
    SharedPreferences.Editor editor = settings.edit();
    editor.putInt("one", Int1); //the rest of the variable 
editor.commit();

私の共有設定コード(再開時):

    SharedPreferences settings = PreferenceManager
            .getDefaultSharedPreferences(getApplicationContext());
    int1 = settings.getInt("one", int1); //the rest of the variable 

インテントアクティビティを転送するための私のコード 3:

Bundle number = new Bundle();
    number.putInt("three", int3);
    Intent a = new Intent(Card.this, Main.class);
    a.putExtras(number);
4

1 に答える 1

1

共有設定ファイル (名前) は常に同じですよね?

異なるアクティビティ/サービス/インテント/... から共有設定を使用している場合は、モードMODE_MULTI_PROCESS (定数値 int = 4) で使用する必要があります。そうでない場合、ファイルはロックされ、一度に書き込めるのは 1 つのプロセスだけです。

したがって、マルチ プロセス アプリで共有設定を呼び出すときは、次のようにします。

SharedPreferences preferences = this.getSharedPreferences("myapp",4);

MODE_MULTI_PROCESS は Android 2.3 までのすべてのバージョンで ON ですが、後者は厳密に呼び出す必要があります。公式ドキュメントは次のように述べています。

動作モード。デフォルトの操作には 0 または MODE_PRIVATE を使用し、パーミッションを制御するには MODE_WORLD_READABLE と MODE_WORLD_WRITEABLE を使用します。ビット MODE_MULTI_PROCESS は、複数のプロセスが同じ SharedPreferences ファイルを変更している場合にも使用できます。MODE_MULTI_PROCESS は、Gingerbread (Android 2.3) 以下をターゲットとするアプリでは常にオンになり、それ以降のバージョンではデフォルトでオフになります。

于 2013-03-28T22:09:53.177 に答える