2012-03-17 160 views
0

这是我在这里的第一篇文章,所以对我来说很容易lol!好吧,所以我是新来的,我一直在这个代码上工作几天,我似乎无法得到这个首选项的概念。我在这个网站的任何地方都搜索过,我相信这些代码应该可以正常使用我在本网站和其他网站上看到的所有信息。我看过无数的例子,但仍然不明白我做错了什么。Android SharedPreferences强制关闭应用程序

这是我的主要活动的一小部分,当用户启动应用程序时首先启动。我有一个选项菜单上的另一项活动,用于计算当前日期和用户所选日期之间的差异,我希望将生成的整数传递到主活动并显示其值的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显示我想要的整数。问题是,当我使用此代码

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

在我的第一个活动它强制关闭打开。如果我从第一项活动中删除此代码,则应用程序将打开,这对我没有任何意义。我在这里查看的所有其他代码似乎完全按照我没有遇到的问题使用此代码段,因此我不明白我做错了什么。任何帮助将不胜感激。我有一种感觉,这是我愚蠢的,我继续俯瞰。可能是因为看了几个小时的代码大声笑!

+1

logcat说什么? – Snicolas 2012-03-17 05:24:33

回答

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

为什么在'Activity'内将'Context'传递给'Toast.makeText(...)'时会使用'getBaseContext()'?你所要做的就是使用'this'。此外,在提供String(或CharSequence)参数时使用“String + Integer”构造将在并置过程中将Integer隐式转换为字符串。没有必要使用'String.valueOf(...)'。 – Squonk 2012-03-17 06:23:56

+0

@MisterSquonk:我同意you.but它取决于我们在哪里使用Toast.makeText(Context cont)。看到这个[getBaseContext()而不是这个](http://stackoverflow.com/questions/9605459/android-why-must-use-getbasecontext-instead-of-this/9606712#9606712) – 2012-03-17 06:33:13

+0

这个问题表明'吐司.makeText(...)'在'Activity'的'onCreate(...)'方法中被调用 - 在这种情况下,除了'this'之外没有任何用处。 – Squonk 2012-03-17 06:48:51

0

您的活动的情况下......我think..You应该得到共享偏好 尝试这样的..

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

这不会帮助。提供String(或CharSequence)参数时使用“String + Integer”构造将在并置过程中将Integer隐式转换为字符串。 – Squonk 2012-03-17 06:21:57

+0

是的...我早些时候遇到同样类型的问题..但后来我dint使用串联..而是我试图让它在int intless ..它显示我错误..所以然后我用String.valueOf .. .thnx用于纠正.. – 5hssba 2012-03-17 06:39:41

0

使用此

Context context = getApplicationContext(); 
Toast.makeText(context, ("Days" + diffDays), 
      Toast.LENGTH_LONG).show(); 
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输出,指示哪一行抛出未处理的异常并导致关闭。