2013-07-22 42 views
2

我想我错过了从SharedPreferences检索值的东西。共享偏好阅读值返回默认值

我的代码:

public class SecondActivity extends Activity { 

    private TextView password; 
    private EditText username; 
    private Button button; 
    private String name; 
    private String pass; 
    private Set<String> set; 
    private TextView show; 
    SharedPreferences myPrefs; 
    SharedPreferences.Editor editor; 

    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.second); 

     myPrefs = this.getPreferences(MODE_PRIVATE); 
     editor = myPrefs.edit(); 

     username = (EditText) findViewById(R.id.editText1); 
     password = (EditText) findViewById(R.id.editText2); 
     button = (Button) findViewById(R.id.button1); 
     show = (TextView) findViewById(R.id.textView3); 

     name = username.getText().toString(); 
     pass = password.getText().toString(); 

     /* 
     * set = new HashSet<String>(); set.add(name); set.add(pass); 
     */ 

    } 

    public void saveToPreference(View v) { 

     editor.putString("UserName", name); 
     editor.putString("Password", pass); 
     editor.commit(); 

     SharedPreferences myPref = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
     String use = myPref.getString("UserName", "Sorry"); 
     String pas = myPref.getString("Password", "SorryAgain"); 
     Toast.makeText(getApplicationContext(), use, Toast.LENGTH_SHORT).show(); 
     show.append(use + "\n" + pas); 

    } 

} 

应用程序不强制/关闭。相反,我得到defaultValues; “对不起”,“对不起”来自SharedPreferences"Sorry"得到烘烤。

我该怎么办?

+0

logcat中可知,在java.io.FileInputStream中。 (FileInputStream.java:78)在java.io.FileReader。 (FileReader.java:42),非法状态异常等... – VijayaRagavan

+0

你可以发布整个堆栈跟踪吗?另外,作为第一个观察:如果您正在从'PreferenceManager.getDefaultSharedPreferences(getApplicationContext())'读取数据'',那么您应该使用同一个'SharedPreferences'存储。 – gunar

+1

尝试过,但现在空字符串返回... – VijayaRagavan

回答

3

您正在修改返回的preferences

this.getPreferences(MODE_PRIVATE); 

然后你正在阅读返回的喜好:

PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 

你应该初始化myPrefs在onCreate,然后使用该实例中的所有Activity功能可确保您使用的是完全相同的SharedPreferences。事情是这样的:

protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second); 

    myPrefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    editor = myPrefs.edit(); 


    username = (EditText)findViewById(R.id.editText1); 
    password = (EditText)findViewById(R.id.editText2); 
    button = (Button)findViewById(R.id.button1); 
    show = (TextView)findViewById(R.id.textView3); 

} 


    public void saveToPreference(View v){ 

    editor.putString("UserName",username.getText().toString()); 
    editor.putString("Password", password.getText().toString()); 
    editor.commit(); 

    String use = myPrefs.getString("UserName", "Sorry"); 
    String pas = myPrefs.getString("Password", "SorryAgain"); 
    Toast.makeText(getApplicationContext(), use,Toast.LENGTH_SHORT).show(); 
    show.append(use+"\n"+ pas); 


} 
+0

更改了代码。现在没有任何东西被烘烤。甚至不是默认值。 Logcat不显示 – VijayaRagavan

+0

只返回空字符串值 – VijayaRagavan

+0

当您使用putString时,变量名称和传递不为空? –

1
//In oncreate if its an activity or do it on top of class 
    SharedPreferences myPref= getPreferences(MODE_PRIVATE); 
    SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit(); 

//Add data after getting it from edittext 
    editor.putString("UserName",name); 
    editor.putString("Password", pass); 
    editor.commit(); 

//get data 
    String use = myPref.getString("UserName", "Sorry"); 
    String pas = myPref.getString("Password", "SorryAgain"); 
+0

感谢sreedev ...... – VijayaRagavan

+1

快乐帮:-)支持upvoting –