【发布时间】:2012-06-07 17:34:53
【问题描述】:
我只是想将一个字符串带到下一个活动中,而不必为该任务定义整个对象。我见过类似的解决方案并让它们工作但不使用 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 是否有可能因为它分裂成一个单独的线程而受到某种干扰?
【问题讨论】:
-
你的目标
Activity的launchMode是什么? -
我没有明确定义。无论默认是什么。
-
AsyncTask真的不应该有所作为。您是否进行了调试以确保您传入的用户名(在您将其放入Intent之前)不为空? -
查看this 问题,了解您可能拥有的选项。尝试使用
Bundle类。我相信AsyncTask不是这里的情况。 -
@Ryan Gray:顺便说一句……当您尝试在第二个
Activity中获取用户名时,您使用的是UniteActivity.PASSED_USERNAME。以这种方式让Activity公开任何部分(常量、变量、方法等)是不好的做法。一个Activity不应该访问另一个Activity类的任何其他部分,并且大多数情况下它会失败(尤其是方法)。我建议在一切变得可怕之前改掉这个习惯。定义一个辅助类 (POJO) 来维护常量之类的东西或扩展Application并在其中声明它们。