【问题标题】:Android SharedPreferences force closes appAndroid SharedPreferences 强制关闭应用
【发布时间】:2012-03-17 05:14:57
【问题描述】:

这是我在这里的第一篇文章,所以请放轻松,哈哈!好的,所以我对此很陌生,而且我已经研究这段代码好几天了,我似乎无法理解这个首选项的概念。我在这个网站上到处搜索,我相信这段代码应该可以根据我在这个网站和其他网站上查看的所有信息正常工作。我看了无数的例子,仍然不明白我做错了什么。

这是我的主要活动的 sn-p,它在用户启动应用程序时首次启动。我在选项菜单上有另一个活动,它计算当前日期和用户选择的日期之间的差异,我希望将结果整数传递到主活动并显示它的值。

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

这是我的第二个活动的 sn-p,它计算整数 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();;

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

【问题讨论】:

    标签: java android eclipse preferences shared


    【解决方案1】:

    试试这个:

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

    【讨论】:

    • Activity 中将Context 传递给Toast.makeText(...) 时,为什么要使用getBaseContext()?您所要做的就是使用this。此外,在提供 String(或 CharSequence)参数时使用“String + Integer”构造将在连接过程中将 Integer 隐式转换为 String。无需使用String.valueOf(...)
    • @MisterSquonk :我同意你的看法。但这取决于我们在哪里使用 Toast.makeText(Context cont)。看到这个getBaseContext() instead of this
    • 问题显示Toast.makeText(...) 是在ActivityonCreate(...) 方法中调用的——在这种情况下,使用this 以外的任何东西都没有意义。
    【解决方案2】:

    我认为..您应该获得有关活动上下文的共享偏好... 试试这样..

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

    【讨论】:

    • 那无济于事。在提供 String(或 CharSequence)参数时使用“String + Integer”构造将在连接过程中将 Integer 隐式转换为 String。
    • 是的...我之前遇到过相同类型的问题..但后来我尝试使用连接..相反,我尝试用 int 制作吐司..它向我显示错误..然后我用 String.valueOf...thnx 来纠正..
    【解决方案3】:

    使用这个

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

    【讨论】:

      【解决方案4】:

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

      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 输出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-30
        • 2011-05-31
        • 2012-07-13
        相关资源
        最近更新 更多