我有一些代码在 98% 的时间内有效,在我自己的测试中则为 100%,因此除了让用户设备遇到此问题之外,我无法真正重现该问题。
我在 onPostExecute() 中所做的是设置如下参数:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( AddProblemActivity.this);
prefs.edit().putString("recent_problem_id", result ).commit();
然后转到下一个活动:
Intent myIntent = new Intent(AddProblemActivity.this, ProblemActivity.class);
AddProblemActivity.this.startActivity(myIntent);
然后尝试像这样获取该参数:
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(
ProblemActivity.this);
// display a loading message before problem loads.
String recent_problem_id = prefs.getString( "recent_problem_id" , null );
if ( recent_problem_id == null )
{
// Sometimes it is null!
}
有人知道为什么会发生这种情况吗?
Thanks!
如果您尝试将数据传递给新活动,为什么不将其作为 String extra 放入意图中呢?然后,从新活动的意图中获取该字符串。如果您仍然需要存储它,可以在新活动的 onCreate() 从意图中提取它后执行此操作。
Intent myIntent = new Intent(AddProblemActivity.this, ProblemActivity.class);
//Add results here
myIntent.putExtra("RecentProblemId", result);
AddProblemActivity.this.startActivity(myIntent);
然后,在新 Activity 的 onCreate 中,执行以下操作:
String recentProblemId = getIntent().getStringExtra("RecentProblemId");
现在,如果您仍然需要存储此信息,请执行以下操作:
if(recentProblemId != null){
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(
ProblemActivity.this);
prefs.putString("recent_problem_id",recentProblemId).commit();
}
我知道这并不能完全回答您的问题,即为什么字符串并不总是被提交到 onPostExecute() 中的首选项。然而,在活动之间传递信息的最佳实践是通过 Intent 和 extra。
我的猜测是,为什么它可能并不总是适合某些用户,是因为他们的设备在新活动启动并尝试从同一文件中读取数据之前尚未完成将数据写入共享首选项文件。希望这可以帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)