Android SharedPreferences принудительно закрывает приложение - PullRequest
0 голосов
/ 17 марта 2012

Это мой первый пост здесь, так что не волнуйтесь, лол! Итак, я новичок в этом, и я работал над этим кодом в течение нескольких дней, и я не могу понять эту концепцию предпочтений. Я искал повсюду на этом сайте, и я считаю, что этот код должен хорошо работать со всей информацией, которую я просматривал на этом сайте и других. Я посмотрел на бесчисленные примеры и до сих пор не понимаю, что я делаю неправильно.

Это фрагмент моей основной деятельности, который впервые инициируется, когда пользователь запускает приложение. У меня есть другое действие в меню параметров, которое вычисляет разницу между текущей датой и выбранной пользователем датой, и я хотел бы, чтобы полученное целое число было передано в основное действие и отображало тост его значения.

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, когда пользователь нажимает кнопку в предыдущем разделе второго действия, и вычисления работают нормально. Тост во втором упражнении отображает целое число, которое я хочу. Проблема в том, что когда я использую этот код

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

в моем первом упражнении сила закрывается при открытии. Если я удалю этот код из первого действия, откроется приложение, которое не имеет никакого смысла для меня. Все остальные коды, которые я здесь проверил, похоже, используют этот фрагмент точно так же, как и я без проблем, поэтому я не понимаю, что я делаю неправильно. Любая помощь будет с благодарностью. У меня такое чувство, что это что-то глупое, что я продолжаю упускать из виду. Вероятно, из-за того, что часами смотрю на код, лол!

Ответы [ 4 ]

0 голосов
/ 17 марта 2012

Проблема в том, что когда я использую этот код

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, указывающий, какая строка вызывает необработанное исключение и вызывает принудительное закрытие.

0 голосов
/ 17 марта 2012

попробуйте это:

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 голосов
/ 17 марта 2012

Используйте это

Context context = getApplicationContext();
Toast.makeText(context, ("Days" + diffDays),
            Toast.LENGTH_LONG).show();
0 голосов
/ 17 марта 2012

Я думаю .. Вы должны получить общие предпочтения в контексте вашей деятельности ... попробуй вот так ..

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