2013-08-01 3 views
0

У меня есть этот код, где я пытаюсь сохранить некоторые постоянные данные с помощью sharedpreferences в действии «InitialPreferences», действие «StartScreen» затем выполняет поиск сохраненных настроек при следующем запуске приложения и направляет пользователя в «InitialPreferences» или «MainActivity». Моя проблема в том, что данные не сохраняются, и я не вижу проблемы, может ли кто-нибудь направить меня к проблеме и показать мне, что я сделал неправильно?Sharedpreferences, не сохраняющий или загружающий данные

Благодаря

Старт.экр активность:

public class StartScreen extends Activity { 

CountDownTimer waitTimer; 
public static final String APP_PREFERENCES = "AppPrefs"; 
SharedPreferences settings; 
SharedPreferences.Editor prefEditor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_start_screen); 

    settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE); 
    // prefEditor = settings.edit(); 

    waitTimer = new CountDownTimer(5000, 300) { 

     public void onTick(long millisUntilFinished) { 
      //called every 300 milliseconds, which could be used to 
      //send messages or some other action 
     } 
     public void onFinish() { 
      //After 5000 milliseconds (5 sec) finish current 
      //if you would like to execute something when time finishes 
      getPreferences(); 
     } 
    }.start(); 
} 

private void getPreferences() { 
    // TODO Auto-generated method stub 
    String UserName = settings.getString("UserName", ""); 

    if (UserName != null) { 
     // the key does not exist 
       Intent intent=new   Intent(StartScreen.this,InitialPreferences.class); 
       startActivity(intent); 
      } 
    if (UserName.equals("UserName")){ 
     // handle the value 
       Intent intent=new Intent(StartScreen.this,MainActivity.class); 
       startActivity(intent); 
    }  
} 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.start_screen, menu); 
    return true; 
} 
} 

InitialPreferences активность:

public class InitialPreferences extends Activity implements OnClickListener { 

EditText editText1; 
Button button1; 
TextView textView1; 
RadioGroup radioGroup; 
RadioButton radioPosistionButton; 

public static final String APP_PREFERENCES = "AppPrefs"; 
SharedPreferences settings; 
SharedPreferences.Editor prefEditor; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.initial_preferences); 

    textView1 = (TextView)findViewById(R.id.textView1); 
    editText1 = (EditText)findViewById(R.id.editText1); 
    button1 = (Button)findViewById(R.id.button1); 
    radioGroup = (RadioGroup) findViewById(R.id.radioGroup); 

    settings = getSharedPreferences(APP_PREFERENCES, MODE_PRIVATE); 
     prefEditor = settings.edit(); 

    LoadPreferences(); 
} 

@Override 
public void onClick(View v) { 

SavePreferences(); 
LoadPreferences(); 
} 

private void SavePreferences() { 
// TODO Auto-generated method stub 

String Uname_input = editText1.getText().toString(); 
int checkedButton = radioGroup.getCheckedRadioButtonId(); 
prefEditor.clear(); 
prefEditor.putString("UserName", Uname_input); 
prefEditor.putInt("posistion", checkedButton); 
prefEditor.apply(); 
prefEditor.commit(); 
} 

private void LoadPreferences(){ 

String UserName = settings.getString("UserName", ""); 
editText1.setText(UserName + ""); 
Toast.makeText(getApplicationContext(), UserName, Toast.LENGTH_SHORT).show(); 
} 
} 
+0

Вы когда-нибудь видели работу InitialPreferences? Он не похож на тебя. –

+0

Я ... почему бы мне? –

+0

Я изначально неправильно понял ваш условный, но мой ответ ниже по-прежнему применяется. –

ответ

1

Ваша первая проблема заключается в том, что (UserName != null) всегда верно. Вы получаете UserName с String UserName = settings.getString("UserName", "");, который предоставит значение по умолчанию пустой String. Если вы хотите, чтобы настройки возвращали значение null, если предпочтение не найдено, вы должны позвонить settings.getString("UserName", null).

Ваша вторая проблема в том, что вы никогда не звоните setOnClickListener(this) по любому из видов в вашем InitialPreferences Деятельность. Таким образом, onClick() никогда не вызывается, и ничего не происходит. Я предполагаю, что вы хотите позвонить button1.setOnClickListener(this) в onCreate().

+0

Привет, спасибо за ваш ответ, мне нравится, что этот сайт всегда полезен для новичков. У меня теперь есть nullpointerexception после изменения на settings.getString ("UserName", null)? любая идея, почему ?. Благодарим за обнаружение кликмена. –

+0

Привет, сейчас работаю. Я очистил проект, так как не мог понять, почему он выбрасывает этот нулевой указатель и что он его решил. Мне также пришлось изменить, если (UserName.equals («UserName»)) {to if (UserName.equals (UserName)) { –

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