2012-07-25 15 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