2013-09-12 4 views
1

У меня была эта проблема в течение нескольких дней. Казалось бы, мои общие настройки не работают, когда я устанавливаю свои данные. Пользователь начинает с main, который отображает «oncreate», а затем переходит на страницу настроек (где данные автоматически устанавливаются (пока)), когда они возвращаются к основному Activity, данные, похоже, не хотят , Я использую библиотеку времени joda, и я пытаюсь вычислить разницу между двумя датами во времени.Общие настройки, не передающие данные между действиями

Main: (Код OnCreate код и onResume одинаковы)

public class MainActivity extends Activity { 

    TextView tv; 
    Button set; 

    //CONST 
    final static long MILLIS_IN_DAY = 86400000; 
    final static long MILLIS_IN_HOUR = 3600000; 
    final static long MILLIS_IN_MINUTE = 60000; 
    long day, hour, minute; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tv = (TextView) findViewById(R.id.textViewx); 
     set = (Button) findViewById(R.id.setting); 
     tv.setText("ONCREATE!"); 

     //LOAD DATA 
     SharedPreferences prefs = getPreferences(MODE_PRIVATE); 
     long loadedTime = prefs.getLong("quitDate", 0); //Load Settings Data 
     boolean test = prefs.getBoolean("test", false); 

     //get Comparison Data 
     DateTime newDate = new DateTime(); 
     long updateTime = newDate.getMillis(); 
     long diffInMillis = (updateTime-loadedTime); 

     //Calculate 
     minute = (diffInMillis/MILLIS_IN_MINUTE)%60; 
     hour = (diffInMillis/MILLIS_IN_HOUR)%24; 
     day = (diffInMillis/MILLIS_IN_DAY); 

     tv.setText(""+Long.toString(loadedTime)); 
     if(test==true){ 
      tv.setText("" + "\nDay|Hour|Minute: " + Long.toString(day) +":" + Long.toString(hour) + ":" + Long.toString(minute)); 
     } 


     set.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
       Intent x = new Intent(MainActivity.this, Settings.class); 
       startActivity(x); 

      } 
     }); 

Настройки:

import org.joda.time.DateTime; 
import android.content.SharedPreferences; 

public class Settings extends Activity implements View.OnClickListener { 
    Button bAbout,bSettings,bFacebook; 
    //(5000); 
      final long MILLIS_IN_DAY = 86400000; 
      final long MILLIS_IN_HOUR = 3600000; 
      final long MILLIS_IN_MINUTE = 60000; 
    //Variables 
    long loadedTime; 
    int packs; 
    float cost; 
    long day, hour, minute, second; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setTitle("Settings"); 
     setContentView(R.layout.activity_settings); 
     setUpButtons(); 

     DateTime d1 = new DateTime(2013,9,11,0,0); 

     long today = d1.getMillis();   

     //SAVE DATA 
     SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 
     editor.putLong("quitDate", today); 
     editor.putBoolean("test", true); 
     editor.commit(); 

     minute = (today/MILLIS_IN_MINUTE)%60; 
     hour = (today/MILLIS_IN_HOUR)%24; 
     day = (today/MILLIS_IN_DAY); 

     TextView tv = (TextView) findViewById(R.id.TEMPDATE); 
     TextView tv2 = (TextView) findViewById(R.id.todayis); 
    tv2.setText("Today is: " + Long.toString(today)); 

    } 
+1

Это нехорошее использование общих настроек, и вы слишком усложняете свой код. Общие предпочтения предназначены для сохранения значений между экземплярами вашего приложения. Вместо этого попробуйте 'startActivityForResult'. На сайте разработчика Android есть необходимая документация. Я рекомендую вам отказаться от попытки исправить эту проблему и переписать код правильно. – Simon

+0

Саймон, хотя я ценю ваш ответ, я пытаюсь понять, почему Shared Preferences, похоже, не работают в этом случае. Это орошаемая версия кода, в конце я буду хранить более двух частей данных в общих предпочтениях для других операций. – TaylorTheDeveloper

+0

переместите свой код в 'onStart()'. от создания 'd1' до конца. –

ответ

1

Вы используете предпочтения, которые являются закрытыми для каждого вида деятельности. Это означает, что у вас есть два набора настроек: один для MainActivity и один для настроек.

Вот соответствующая документация сниппет:

активность устойчивое состояние управляется с помощью метода getPreferences (INT), что позволяет извлекать и изменять набор пар имя/значение, связанное с деятельностью. Чтобы использовать предпочтение, которые являются общими для нескольких компонентов приложения (мероприятий, приемников, услуги, поставщики), вы можете использовать основные Context.getSharedPreferences() метод для извлечения предпочтений объекта , хранящихся под определенным именем

http://developer.android.com/reference/android/app/Activity.html#getPreferences(int)

Вы можете использовать что-то вроде getSharedPreferences("MY_PREFERENCES", MODE_PRIVATE) или просто позвонить PreferenceManager.getDefaultSharedPreferences(Context context), чтобы установить установленные по умолчанию настройки.

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