Java Android SharedReferences强制关闭应用程序
这是我在这里的第一篇帖子,所以对我放松点,哈哈!好吧,我是新手,我已经在这段代码上工作了好几天了,我似乎无法理解偏好的概念。我在这个网站上到处都搜索过,我相信这个代码在我在这个网站和其他网站上看到的所有信息下都会很好地工作。我看了无数的例子,仍然不明白我做错了什么 这是我的主要活动的一个片段,它是在用户启动应用程序时首次启动的。我在选项菜单上有另一个活动,它计算当前日期和用户所选日期之间的差值,我希望结果的整数传递到主活动上,并显示其值Java Android SharedReferences强制关闭应用程序,java,android,eclipse,preferences,shared,Java,Android,Eclipse,Preferences,Shared,这是我在这里的第一篇帖子,所以对我放松点,哈哈!好吧,我是新手,我已经在这段代码上工作了好几天了,我似乎无法理解偏好的概念。我在这个网站上到处都搜索过,我相信这个代码在我在这个网站和其他网站上看到的所有信息下都会很好地工作。我看了无数的例子,仍然不明白我做错了什么 这是我的主要活动的一个片段,它是在用户启动应用程序时首次启动的。我在选项菜单上有另一个活动,它计算当前日期和用户所选日期之间的差值,我希望结果的整数传递到主活动上,并显示其值 public class SmokeStopperActi
public class SmokeStopperActivity extends Activity
{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
public static final String PREFERENCE_FILENAME = "DaysPassed";
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
SharedPreferences preference = getSharedPreferences("DaysPassed", MODE_PRIVATE);
int diffDays = preference.getInt("daysPassed", 0);
Toast.makeText(SmokeStopperActivity.this, ("Days" + diffDays),
Toast.LENGTH_LONG).show();;
这是我的第二个活动的一个片段,它计算整数diffDays的值
long diff = milis2 - milis1;
int diffDays = (int) (diff / (24 * 60 * 60 * 1000) + 30);
Toast.makeText(SetDate.this, (diffDays),
Toast.LENGTH_LONG).show();;
SharedPreferences preference = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor prefEditor1 = preference.edit();
prefEditor1.putInt("daysPassed", diffDays);
prefEditor1.commit();
我让我的第二个活动发送diffDays整数的祝酒词,当用户按下第二个活动前面部分中的按钮时,计算工作正常。第二个活动中的Toast显示我想要的整数。问题是当我使用这个代码时
SharedPreferences preference = getSharedPreferences("DaysPassed", MODE_PRIVATE);
int diffDays = preference.getInt("daysPassed", 0);
Toast.makeText(SmokeStopperActivity.this, ("Days" + diffDays),
Toast.LENGTH_LONG).show();;
在我的第一个活动中,它强制关闭打开。如果我从应用程序打开的第一个活动中删除此代码,这对我来说没有任何意义。我在这里检查的所有其他代码似乎都像我一样使用这个片段,没有任何问题,所以我不明白我做错了什么。任何帮助都将不胜感激。我有一种感觉,这是我一直忽视的愚蠢的事情。可能是因为看了好几个小时的代码,哈哈 我认为..你应该在你的活动背景下获得共享的偏好。。。 像这样试试
SharedPreferences prefs = this.getSharedPreferences( "DaysPassed", MODE_PRIVATE);
试试这个:
SharedPreferences preference = SmokeStopperActivity.this.getSharedPreferences("DaysPassed", MODE_PRIVATE);
int diffDays = preference.getInt("daysPassed", 0);
Toast.makeText(SmokeStopperActivity.this, ("Days" + String.valueOf(diffDays)),
Toast.LENGTH_LONG).show();
用这个
Context context = getApplicationContext();
Toast.makeText(context, ("Days" + diffDays),
Toast.LENGTH_LONG).show();
问题是当我使用这个代码时
SharedPreferences preference = getSharedPreferences("DaysPassed", MODE_PRIVATE);
int diffDays = preference.getInt("daysPassed", 0);
Toast.makeText(SmokeStopperActivity.this, ("Days" + diffDays),
Toast.LENGTH_LONG).show();;
在我的第一个活动中,它强制关闭打开。如果我从应用程序打开的第一个活动中删除此代码,这对我来说没有任何意义
对。这毫无意义。这段代码没有什么问题……嗯,实际上是有问题的。我会把它写成
Toast.makeText(this, "Days" + diffDays, Toast.LENGTH_LONG).show();
…但无论哪种方式,它都有效-我的版本和你的版本。您的代码还有其他问题,与这三行无关
忘记第二个
活动
,只需发布第一个活动的全部内容
,以及指示哪一行引发未处理异常并导致强制关闭的logcat输出。这没有帮助。在提供字符串(或CharSequence)参数时使用“String+Integer”构造将在连接过程中将整数隐式转换为字符串。是的…我之前遇到过相同类型的问题。。但是我不能使用连接。。相反,我试着用int做土司。。这让我看到了错误。。然后我使用String.valueOf…thnx来更正..在活动中向Toast.makeText(…)
传递上下文时,为什么要使用getBaseContext()
?你所要做的就是使用这个。此外,在提供String(或CharSequence)参数时使用“String+Integer”构造将在连接过程中将整数隐式转换为字符串。没有必要使用String.valueOf(…)
@MisterSquonk:我同意你的看法。但这取决于我们在哪里使用Toast.makeText(上下文续)。看到这个问题了吗?这个问题表明,活动的onCreate(…)
方法调用了Toast.makeText(…)
——在这种情况下,除了这个
之外,没有任何其他用途。