0

Androidアプリのすべてのページに文字列を渡したい。ユーザーがログインしたら、userNameなどを文字列に保存します。複数のページに文字列を送信したい。どうやってやるの?

インテントを介して送信しようとしました

Intent myIntent = new Intent(view.getContext(), Help.class);  
myIntent.putExtra("userName", userNameString);
startActivityForResult(myIntent, 0); 

しかし、別のページに移動するときは、毎回Intentを介してデータを送信し続けたくありません。

解析して文字列に入れるクラスから取得しようとしました

HomeScreen home = new HomeScreen();
String userName= home.userNameString;

しかし、私はHomeScreenの新しいインスタンスを作成しているのでuserNameStringnull

どんな助けでも大歓迎です

4

3 に答える 3

2

Androidアプリケーションのメモリ状態は流動的である可能性があるため、静的変数またはインスタンス変数を使用してこの状態を保持することに注意してください。バックグラウンドでアプリケーションプロセスが強制終了された場合、メモリにのみ保存されているデータは、知らないうちに破棄される可能性があります。

SharedPreferences最も簡単なメカニズムは、アプリケーションのどこからでもアクセスできるようにデータを永続化することです。したがって、最初にログインから取得した文字列を保存します(これは、アクティビティ内で呼び出されます、FYI)。

//Write the username string to preferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().putString("userName", userNameString).commit();

次に、アプリケーションの他の場所(つまり、他のアクティビティインスタンス)がその文字列を読み取ることができます。

//Read the username string
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
String userName = prefs.getString("userName", "");

を使用SharedPreferencesすると、値は実際に保持されます。つまり、値はディスク上で永久に存続し、アプリケーションのメモリがリセットされたからといって消えることはありません(これは通常、特にログイン情報にとって有利です)。このため、ユーザーが次のように「ログアウト」したときにも文字列を削除する必要があります。

//Remove the username string from preferences
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
prefs.edit().remove("userName").commit();

contains()値が現在保存されているかどうか(ユーザーがログインしているかどうか)を確認できるようにするなどの方法もあります。

于 2012-07-10T20:46:50.017 に答える
1

呼び出しActivityがメモリに残ることは保証されていません...Androidシステムはいつでもそれを破壊する可能性があります。

Activityがユーザー名に依存している場合、情報を渡す正しい方法は。を使用することIntentです。

于 2012-07-10T20:42:25.387 に答える
0

静的変数を宣言し、どこからでも使用できます。

public class SomeClass
{
    public static String userNameString;
}

次のように使用します。

Strign s = SomeClass.userNameString;

その値を次のように変更します。

SomeClass.userNameString = "new string";
于 2012-07-10T20:40:16.353 に答える