2

Webサーバーからsayinのような特定のデータを取得userNameします。Activity_1次に、同じデータを使用したいActivity_2

だから私はこのuserNamePublic Staticを作り、このように使用しましたActivity_2

Activity_1.userName

しかし、私が入って5分後にアプリケーションを再度開くと、これActivity_2はそれ以降になります。そして私は得るpress Home ButtonActivity_1.userNameNullActivity_1 data is destroyedNullPointerException

簡単な方法でこれを解決する方法。

userNameの例を挙げましたが、実際には、「今日のニュース」など、毎日変化する他のデータもあります。

public static多くの人は、そのuserNameを削除して次のように送信することを提案します。

Intent.putExtra("user_name", userName);

しかし、これは私がしていることと同じではありません。私はこのようにさえ私がNullPointerException正しくなるという意味ですか?

4

4 に答える 4

2

インテントが保存されるので、正解はputExtraを使用することです。アクティビティを再インスタンス化する必要がある場合は、インテントを使用してアクティビティが再度作成されます。

于 2012-09-01T10:01:11.010 に答える
2

このイベントにアクションを追加して、アクションが存在する場合にのみイベントをキャッチできます...

そしてもちろん、データを永続的に保存することもできます-SQLiteデータベースまたはSharedPreferences

于 2012-09-01T10:02:59.507 に答える
2

これを行うには2つの方法があります。

  1. Activity1がアプリケーションの開始アクティビティであることを常に確認してください。つまり、ユーザーがアプリを閉じて再起動した場合、アプリケーションはActivity1から取得する必要があるため、データを再度取得する必要があります。そして、Activity2にのみ移動します。また、 AsyncTaskを使用して、Activity2自体でWebからデータをフェッチできることにも注意してください。

  2. アクティビティ1のデータをSharedPreferencesに保存し、Activity2では常にSharedPreferencesを使用して値を読み取ります。

于 2012-09-01T10:09:10.000 に答える
2

swayamが提案したように、DBまたは共有設定を選択することをお勧めします。特に共有設定はシナリオに最適です。

次のようなものを使用できます。

置く:

SharedPreferences sharedPreferences = getSharedPreferences("PREFS_READ",
                Context.MODE_WORLD_READABLE);
        Editor prefsPrivateEditor = sharedPreferences.edit();
        prefsPrivateEditor.putString("yourkey", userName);
prefsPrivateEditor.commit();

取得するため:

SharedPreferences sharedPreferences;
        Context otherAppsContext = null;
        try {
            otherAppsContext = getApplication().createPackageContext(
                    "your.package.name", 0);
        } catch (NameNotFoundException e) {
            Toast.makeText(Email.this, e.toString(), Toast.LENGTH_LONG).show();
        }
        sharedPreferences = otherAppsContext.getSharedPreferences("PREFS_READ",
                Context.MODE_WORLD_WRITEABLE);

        String getusername = sharedPreferences.getString("yourkey","default_value");
于 2012-09-01T10:26:52.233 に答える