2012-07-25 40 views
0

我已经完成了一个应用程序。但是我在sharedpreferences活动中有一些文本,当应用程序启动时它应该从那里拉它并将其插入到edittext中,但是如果应用程序完全关闭,或者手机重新启动,则它不起作用,默认值为改为使用。Android应用不会从sharedpreferences活动中提取信息。使用默认

谁能告诉我为什么这是?你需要什么数据。

以下是主要活动。

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); 
    } 

} 
+0

我们需要查看您用来加载首选项的代码并保存更改后的值。 – Eric 2012-07-25 18:16:58

+0

这一切都在主要活动中完成。 OP已更新。 – 2012-07-25 18:19:21

回答

2

的问题是,您使用的是每次调用相同Editorcommit婷不止一次。这只会保存整个应用程序中的最新更改。

试试这个:

  editor = getPrefs.edit(); 
      if (endis.isChecked()){ 
       editor.putBoolean("enabled", true); 
      }else { 
       editor.putBoolean("enabled", false); 
      } 
      editor.putString("message", message.getText().toString()); 
      editor.commit(); 

并以同样的方式调整其他commit代码。

+0

重新启动后仍然不记得它:(这很奇怪,因为切换按钮状态被召回并设置.... – 2012-07-25 18:29:53

+0

手机重新启动和应用程序重新启动。如果应用程序完全关闭,它不会记忆。 – 2012-07-25 18:34:58

+0

尝试[this code](http://pastebin.com/2HsK9i5h)。我刚刚在我自己的应用程序的'onCreate'中运行它,并且它按预期工作 - 第一次运行时为'false','true' (包括电话重启后) – Eric 2012-07-25 18:37:11