2012-03-17 3 views
0

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

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

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

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

+1

Что говорит logcat? – Snicolas

ответ

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

Почему вы используете 'getBaseContext()' при передаче 'Context' в' Toast.makeText (...) 'в' Деятельности'? Все, что вам нужно сделать, это использовать 'this'. Кроме того, использование конструкции String + Integer при предоставлении параметра String (или CharSequence) будет неявно преобразовывать Integer в String во время процесса конкатенации. Нет необходимости использовать 'String.valueOf (...)'. – Squonk

+0

@MisterSquonk: Я согласен с you.but, это зависит от того, где мы используем Toast.makeText (Context cont). см. этот [getBaseContext() вместо этого] (http://stackoverflow.com/questions/9605459/android-why-must-use-getbasecontext-instead-of-this/9606712#9606712) –

+0

Вопрос показывает, что «Toast .makeText (...) 'вызывается в' onCreate (...) 'методе' Activity' - в этом случае нет смысла использовать что-либо другое, кроме 'this'. – Squonk

0

I think..You должны получить общие предпочтения на контексте вашей деятельности ... попробовать, как это ..

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

Это не поможет. Использование конструкции String + Integer при предоставлении параметра String (или CharSequence) неявно преобразует Integer в строку во время процесса конкатенации. – Squonk

+0

да ... я сталкивался с тем же типом проблемы раньше .. но потом я использую конкатенацию .. вместо этого я попытался сделать тост с int в нем .. и он показал мне ошибку .. поэтому я использовал String.valueOf .. .thnx для исправления .. – 5hssba

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

Смежные вопросы