Android SharedPreferences强制关闭应用

时间:2012-03-17 05:14:57

标签: java android eclipse preferences shared

这是我在这里发表的第一篇文章,所以对我来说很容易大声笑!好的,所以我是新手,我已经在这个代码上工作了好几天,我似乎无法得到这个偏好的概念。我在这个网站上到处搜索过,我相信这个代码应该可以正常使用我在这个网站和其他网站上看到的所有信息。我看过无数的例子,仍然不明白我做错了什么。

这是我在用户启动应用时首次启动的主要活动的片段。我在选项菜单上有另一个活动来计算当前日期和用户所选日期之间的差异,我希望将得到的整数传递给主活动并显示它的值的Toast。

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。第二个活动中的Toast显示我想要的整数。问题是当我使用这段代码时

SharedPreferences preference = getSharedPreferences("DaysPassed", MODE_PRIVATE);
    int diffDays = preference.getInt("daysPassed", 0);
    Toast.makeText(SmokeStopperActivity.this, ("Days" + diffDays),
            Toast.LENGTH_LONG).show();;

在我的第一个活动中,它在打开时关闭。如果我从应用程序打开的第一个活动中删除此代码,这对我没有任何意义。我在这里检查过的所有其他代码似乎都像我一样使用这个代码片段,没有任何问题所以我不明白我做错了什么。任何帮助将不胜感激。我有一种感觉,这是一种愚蠢的东西,我一直在俯视。可能是因为看了几个小时的代码大声笑了!

4 个答案:

答案 0 :(得分:0)

我想..你应该对你的活动背景有共同的偏好...... 试试这个......

SharedPreferences prefs = this.getSharedPreferences( "DaysPassed", MODE_PRIVATE);

答案 1 :(得分:0)

试试这个:

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

答案 2 :(得分:0)

使用此

Context context = getApplicationContext();
Toast.makeText(context, ("Days" + diffDays),
            Toast.LENGTH_LONG).show();

答案 3 :(得分:0)

  

问题是当我使用这段代码时

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

......但不管怎样,它都有效 - 我的版本和你的版本。您的代码还有其他问题,而且与这三行没有关系。

忘记你的第二个Activity,然后发布你的第一个Activity以及logcat输出,指出哪条线正在抛出一个未处理的异常,并使力关闭。