0

私のワークフローは次のとおりです。

LoginActivity -> ActivityB -> ActivityC -> ActivityD

LoginActivity から ActivityD にデータを渡したいのですが、ActivityD には直接行きません。つまり、LoginActivity から ActivityD にデータを渡したいのですが、ActivityD にアクセスしてデータを取得する前に、ActivityB と ActivityC に移動します。

これは可能ですか?

あるアクティビティから別のアクティビティにデータを渡す方法はわかっています。コードは次のとおりです。

        Intent i = new Intent(getApplicationContext(), AnotherActivity.class); 
        i.putExtra("key", (int)1); 
        i.putExtra("something", something); 
        startActivity(i);

そしてAnotherActivity、次のようにしてデータを取得します。

        Bundle extras = getIntent().getExtras();   
        if(extras !=null) 
        {  
            String var = extras.getString("something");
        }

しかし、アクティビティに直接行くのを遅らせたい場合、これはうまくいきません。それで、私が取り出しstartActivity(i);て別の活動に行くとします。最後のアクティビティでデータを取得しようとすると、プログラムがクラッシュします。古き良き NullPointerExeption がポップアップします。

私が説明したことを行う方法を知っている人はいますか?あるアクティビティから別のアクティビティにデータを取得しますが、すぐにそのアクティビティに移動 (または開始) しませんか?

4

4 に答える 4

2

このようにデータを渡したい場合は、共有設定を使用することをお勧めします。使い方は簡単で、プログラムのどこでもデータを使用できます。

SharedPreferences.Editor editor = prefs.edit();
editor.putString("key", (int)1);
editor.putString("something", something);
editor.commit(); 

受け取り時:

SharedPreferences prefs = getSharedPreferences(prefName, MODE_PRIVATE); 
String something = prefs.getString("something", null);
于 2012-04-09T06:20:11.193 に答える
0

いつでもこれらのいずれかを使用できます

•A singleton pattern to share the date across multiple non-consecutive activities.

•A shared preference.

•An external storage

•Entry into db.

•passing data with intents.

このリンクは、いくつかの詳細を提供します。

于 2012-04-09T06:16:11.640 に答える
0

2つのアプローチでそれを行うことができます。 1 ) 共有設定

SharedPreferences.Editor editor = prefs.edit();
editor.putString("key", "Value");
editor.commit(); 

// Shared Pref をフェッチします。

  String value = pref.getString("key" , "");

2 ) アプリケーション レベルのクラスとアクセスを定義します。

クラス 変数の getter 関数と setter 関数で構成されます。あるアクティビティに設定し、別のアクティビティに入る。

于 2012-04-09T06:36:14.090 に答える
0

あなたの問題を解決するには、2 つの選択肢が考えられます。1 つは、データを渡し続けることです。つまり、ACtivityB と ACtivityC でコードを実行する必要があります。

Intent i = new Intent(getApplicationContext(), AnotherActivity.class); 
i.putExtra("key", (int)1); 
i.putExtra("something", something); 
startActivity(i);

もう1つのオプション(より実用的だと思います)は、データにアクセスするための静的メンバーと静的メソッドを備えた別のクラスを作成することです。それはこのように見えるかもしれません

public class SharedResource{
public static String mPassedName;
}

このクラスは必ずしもスレッドセーフであるとは限らないため、事前に警告しておく必要があります。マルチスレッド アクセスを使用している場合は、適切な予防措置を講じてください。

于 2012-04-09T06:16:46.577 に答える