-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 ... –