-3

未从共享首选项获得值textview。 查看代码。 是否有任何错误。 而正是在下面的代码两行之间的区别...显示在共享首选项中输入的值未显示在textView中

sharedPreferences = getSharedPreferences("Mypreferences",Context.MODE_PRIVATE); 

sharedPreferences=PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 

以下是我的代码行..

public class MainActivity extends AppCompatActivity { 
    EditText et_name, et_phon, et_email, et_city; 
    Button button_submit, button_show; 
    SharedPreferences sharedPreferences; 
    SharedPreferences.Editor editor; 
    TextView tv_name,tv_phone,tv_email,tv_city; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    initComponents(); 
    sharedPreferences = getSharedPreferences("Mypreferences", Context.MODE_PRIVATE); 

    button_submit.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      String name, phon, email, city; 
      name = et_name.getText().toString().trim(); 
      phon = et_phon.getText().toString().trim(); 
      email = et_email.getText().toString().trim(); 
      city = et_city.getText().toString().trim(); 

      editor = sharedPreferences.edit(); 
      editor.putString("NameKey", name); 
      editor.putString("phoneKey", phon); 
      editor.putString("emailKey", email); 
      editor.putString("cityKey", city); 
      editor.apply(); 
      Toast.makeText(MainActivity.this, "Submitted", Toast.LENGTH_SHORT).show(); 


     } 
    }); 
    button_show.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 
      String n = sharedPreferences.getString("NameKey", null); 
      String p = sharedPreferences.getString("phoneKey", null); 
      String e = sharedPreferences.getString("emailKey", null); 
      String c = sharedPreferences.getString("cityKey", null); 

      tv_name.setText(n); 
      tv_phone.setText(p); 
      tv_email.setText(e); 
      tv_city.setText(c); 

      Toast.makeText(MainActivity.this, "Show button clicked", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
} 

private void initComponents() { 

    et_name = (EditText) findViewById(R.id.et_name_main); 
    et_phon = (EditText) findViewById(R.id.et_phone_main); 
    et_email = (EditText) findViewById(R.id.et_email_main); 
    et_city = (EditText) findViewById(R.id.et_city_main); 
    tv_name = (TextView) findViewById(R.id.tv_name_main); 
    tv_phone = (TextView) findViewById(R.id.tv_phone_main); 
    tv_email = (TextView) findViewById(R.id.tv_email_main); 
    tv_city = (TextView) findViewById(R.id.tv_city_main); 
    button_submit = (Button) findViewById(R.id.btn_submit_main); 
    button_show = (Button) findViewById(R.id.btn_view_main); 

} 
} 

任何类型的帮助表示赞赏。

+0

这只是创建两个不同的sharedPreferences.xml。默认情况下,在您的应用程序directoy中命名为shared_preferences,另一个在您的情况下使用“mypreferences”命名。 MODE_PRIVATE表示没有其他应用可以输入它。 – Opiatefuchs

+2

您正在保存在SharedPreferences的不同实例中,并在缺省情况下进行检索。在放置和检索时,使用'getSharedPreferences(“Mypreferences”,Context.MODE_PRIVATE)'或默认值。 – VenomVendor

+0

Thanxx。在这个论据中,你们清楚了我的观点,我想知道关于MODES的事情。 –

回答

0

要创建双sharedPreferences xml files在你的app目录。默认的是标准的XML preferences,你有

sharedPreferences = getSharedPreferences("Mypreferences", Context.MODE_PRIVATE); 

创建将您的首选项存储Mypreferences.xml里面的另外一个。 MODE_PRIVATE表示此preferences仅适用于您的应用程序(但在植入设备上,每个人都可以访问)。

如果您想访问您保存的sharedPreferences,您必须使用您用于保存它们的相同首选项。这意味着,要么你必须使用你到处都访问相同的密钥:

sharedPreferences = getSharedPreferences("Mypreferences", Context.MODE_PRIVATE); 

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 

不能同时使用。在你button_show click method,你没有必要创建一个新的sharedPreferences object,只是删除这一行:

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 

,因为你已经产生了全球sharedPreferences object,并且可以在你的class随时随地访问它。

+0

**谢谢**。 –

1

问题是,你正在创建一个名为sharedPref“Mypreferences”存储值,并试图从不抱你已经把价值默认 sharedPreferences检索值。

SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(MainActivity.this); 

更改为

SharedPreferences sharedPreferences = getSharedPreferences("Mypreferences", Context.MODE_PRIVATE); 
+0

谢谢了! silli prob ... –