I have finished making an app. But I have some text in a sharedpreferences activity, and when the app starts it should pull it from there and insert it into an edittext, but if the app is fully closed, or the phone rebooted it doesn't work and the default value is used instead.
Could anyone tell me why this is? And what data you would need.
Below is the main activity.
package com.liamwli.smsbusy;
import android.app.Activity;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.KeyEvent;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.ToggleButton;
import android.content.IntentFilter;
import android.content.SharedPreferences;
public class Sms_busyActivity extends Activity {
IntentFilter intentFilter;
ToggleButton endis;
EditText message;
Button smessage;
SharedPreferences getPrefs;
SharedPreferences.Editor editor;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Intent i = new Intent("com.liamwli.smsbusy.PREFS");
// startActivity(i);
setContentView(R.layout.main);
endis = (ToggleButton) findViewById(R.id.enableddis);
smessage = (Button) findViewById(R.id.savemess);
message = (EditText) findViewById(R.id.message);
getPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
editor = getPrefs.edit();
// ---intent to filter for SMS messages received---
intentFilter = new IntentFilter();
intentFilter.addAction("SMS_RECEIVED_ACTION");
Boolean state = getPrefs.getBoolean("enabled", false);
String stext = getPrefs.getString("text", "");
message.setText(stext);
if (message.getText().toString().contentEquals("")){
Toast.makeText(this, "Unable to get saved message. Please resave.", Toast.LENGTH_LONG).show();
}
endis.setChecked(state);
endis.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
// TODO Auto-generated method stub
Log.d("SMS Busy App", "onCheckedChanged Called");
//Toast.makeText(Sms_busyActivity.this, "App state changed",
//Toast.LENGTH_LONG).show();
if (endis.isChecked()){
editor.putBoolean("enabled", true);
editor.commit();
}else {
editor.putBoolean("enabled", false);
editor.commit();
}
editor.putString("message", message.getText().toString());
editor.commit();
}
});
smessage.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
editor.putString("message", message.getText().toString());
editor.commit();
Toast.makeText(Sms_busyActivity.this, "Message Saved", Toast.LENGTH_SHORT).show();
Log.d("smessage", "Message saved & commited");
}
});
}
@SuppressWarnings("deprecation")
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (Integer.parseInt(android.os.Build.VERSION.SDK) < 5
&& keyCode == KeyEvent.KEYCODE_BACK
&& event.getRepeatCount() == 0) {
Log.d("SMS Busy App", "onKeyDown Called");
onBackPressed();
}
return super.onKeyDown(keyCode, event);
}
public void onBackPressed() {
Log.d("SMS Busy App", "onBackPressed Called");
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// TODO Auto-generated method stub
return super.onCreateOptionsMenu(menu);
}
}
The problem is that you are using the same Editor
for every call, and commit
ting it more than once. This will only save the most recent change throughout the entire application.
Try this:
editor = getPrefs.edit();
if (endis.isChecked()){
editor.putBoolean("enabled", true);
}else {
editor.putBoolean("enabled", false);
}
editor.putString("message", message.getText().toString());
editor.commit();
And adjust your other commit
code in the same manner.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.