我只是简单地尝试将一个字符串带到下一个活动中,而不必为任务定义整个对象。我已经看到了类似的解决方案,并让它们工作,但没有使用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);正如putExtra()方法所要求的那样,PASSED_USERNAME是一个用于保存包名的公共静态常量。然后,我尝试在下一个活动中提取该值。
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的值始终为空。我浏览了调试器,发现Eclipse IDE调试器在活动之间显示不同的意图ID,它们永远不会一致。有没有可能是因为AsyncTask被分成了一个独立的线程,所以它受到了某种干扰?
发布于 2012-06-09 01:52:19
我不知道这是否适用于您的问题,因为我无法从您的代码片段中看到中介活动是否是新创建的。
但:getIntent()-method总是返回启动活动的第一个意图。如果活动保持在后台并接收到新的意图,则该值不会自动更新。你必须覆盖onNewIntent(...)并手动调用setIntent(...)才能正常工作(或者直接在那里做所有的事情)。
因此,如果您没有在onCreate()方法中运行您发布的代码,请检查您是否没有错过获取您感兴趣的真正意图的情况。
发布于 2012-06-08 02:03:16
不确定您的解决方案的确切答案。您在UI上调用startActivity,因为它在postExecute()中。
如果所有其他方法都失败了,您只需将该值保存到一个共享首选项即可。
发布于 2012-06-08 02:05:39
您处理变量PASSED_USERNAME的方式似乎不正确。您在一些宫殿中将其用作简单的PASSED_USERNAME,而在另一些地方,您将其与名为前缀UniteActivity.PASSED_USERNAME的类一起使用。因为它是一个公共静态常量,所以总是使用它作为类名的前缀。
https://stackoverflow.com/questions/10936896
复制相似问题