0

タスクのオブジェクト全体を定義することなく、単に文字列を次のアクティビティに運び込もうとしています。私は同様の解決策を見て、AsyncTaskを使用してインテントを作成せずにそれらを機能させることができました。

protected void onPostExecute(Boolean result) {
        if (loggedIn && hasPin) {

            Intent intent = new Intent(UniteActivity.this,
                    WebViewActivity.class);
            intent.putExtra(PASSED_USERNAME, passUser);
            startActivity(intent);
        }
        if (loggedIn && !hasPin) {

            Intent intent = new Intent(UniteActivity.this,
                    CreatePinActivity.class);
            intent.putExtra(PASSED_USERNAME, passUser);
            startActivity(intent);

PASSED_USERNAMEは、putExtra()メソッドが必要とするように、パッケージ名を保持するためのパブリック静的定数です。次に、次のアクティビティで値を引き出してみます。

Intent extras = getIntent();

            String username = extras.getStringExtra(UniteActivity.PASSED_USERNAME);

            // carry username to next activity
            Intent intent = new Intent(CreatePinActivity.this,WebViewActivity.class);
            intent.putExtra(PASSED_USERNAME, username);
            startActivity(intent);

引き出す文字列はありません。usernameの値は常にnullです。デバッガーを調べたところ、Eclipse IDEデバッガーはアクティビティ間で異なるインテントIDを示しており、一貫性があることはありません。AsyncTaskが別のスレッドに分割されるため、何らかの形で干渉している可能性はありますか?

4

3 に答える 3

0

これがあなたの問題に当てはまるかどうかはわかりません。中間アクティビティが新しく作成されたかどうかは、コードスニペットからはわかりません。

ただし、-methodgetIntent()は常に、アクティビティを開始した最初のインテントを返します。アクティビティがバックグラウンドに残り、新しいインテントを受け取った場合、この値は自動的に更新されません。これを機能させるには、オーバーライドonNewIntent(...)して手動で呼び出す必要setIntent(...)があります(または、すべての作業をそこで直接実行します)。

したがって、投稿されたコードをonCreate()メソッドで実行しない場合に備えて、関心のある本当の意図を取得するのを見逃していないかどうかを確認してください。

于 2012-06-08T17:52:19.060 に答える
0

ソリューションの正確な答えがわからない。postExecute() にあるため、UI で startActivity を呼び出します。

他のすべてが失敗した場合は、その値を共有設定に保存できます。

于 2012-06-07T18:03:16.167 に答える
0

変数 PASSED_USERNAME の処理方法が正しくないようです。一部の宮殿では単純な PASSED_USERNAME として使用しましたが、他の場所では、接頭辞 UniteActivity.PASSED_USERNAME という名前のクラスで使用しました。これは Public Static Constant であるため、常にクラス名の前に付けて使用します。

于 2012-06-07T18:05:39.113 に答える