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);

永远没有要拉出的字符串,用户名的值始终为空。我浏览了调试器,发现 Eclipse IDE 调试器在活动之间显示了不同的意图 ID,它们从来都不一致。AsyncTask 是否有可能因为它分裂成一个单独的线程而以某种方式干扰?

4

3 回答 3

0

不确定您的解决方案的确切答案。您在 UI 上调用 startActivity,因为它位于 postExecute() 中。

如果一切都失败了,您可以将该值保存到共享首选项中。

于 2012-06-07T18:03:16.167 回答
0

您处理变量 PASSED_USERNAME 的方式似乎不正确。您在一些宫殿中将其用作简单的 PASSED_USERNAME,而在其他一些地方您将其与名为 UniteActivity.PASSED_USERNAME 的类一起使用。因为它是一个公共静态常量,所以总是使用它以类名作为前缀。

于 2012-06-07T18:05:39.113 回答
0

我不知道这是否适用于您的问题,因为我无法从您的代码片段中看到中间活动是否是新创建的。

但是getIntent()-method 总是返回启动活动的第一个 Intent。如果活动保持在后台并接收到新的 Intent,则此值不会自动更新。您必须覆盖onNewIntent(...)并手动调用setIntent(...)它才能工作(或直接在那里做所有的事情)。

因此,如果您没有在onCreate()方法中运行发布的代码,请检查您是否没有错过获取您感兴趣的真实意图。

于 2012-06-08T17:52:19.060 回答