【问题标题】:Save multiple EditText values using SharedPreferences使用 SharedPreferences 保存多个 EditText 值
【发布时间】:2017-02-16 19:05:50
【问题描述】:

我正在尝试构建一个应用程序,人们可以在其中填写他们的个人数据,例如他们的姓名、电话号码、电子邮件......

对于上面提到的每个字段,我创建了一个EditText。现在我的目标是使用SharedPreferences 保存用户的输入,这样他/她就不必在每次重新打开应用程序时填写它。

我发现的代码只负责为一个EditText (Save entered text in editText via button) 保存数据。如何在多个 EditText 字段上实现这一点?

下面是我的 XML 文件:

    <?xml version="1.0" encoding="utf-8"?>

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

<LinearLayout 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Vul dit compleet in"
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:textStyle="bold"/>

  <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Naam: "
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:textStyle="bold"/>


    <EditText 
        android:id="@+id/edit_Naam"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:hint="Vul uw naam in"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Functie: "
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:textStyle="bold"/>


    <EditText 
        android:id="@+id/edit_Functie"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:hint="Vul uw functie in"/>

        <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Personeelsnummer "
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:textStyle="bold"/>


    <EditText 
        android:id="@+id/edit_Plnr"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:hint="Vul uw plnr in"/>

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Email: " 
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:textStyle="bold"/>

    <EditText 
        android:id="@+id/edit_Email"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="textEmailAddress" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:hint="NS mail"/>

    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Telefoon: "  
        android:textAppearance="?android:attr/textAppearanceMedium" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:textStyle="bold"/>

     <EditText
         android:id="@+id/edit_Telefoon"  
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:inputType="number" 
        android:paddingLeft="10dp"
        android:paddingRight="10dp"
        android:textColor="#000066"
        android:hint="zonder +31"/>





    <Button
        android:id="@+id/button_Opslaan"
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:layout_below="@+id/edit_Bericht"
            android:layout_centerHorizontal="true"
            android:layout_marginBottom="48dp"
            android:layout_weight="0.03"
            android:background="#009CDE"
            android:drawableLeft="@drawable/ic_launcher"
            android:text="Opslaan"
            android:textColor="#FFFFFF"/>


</LinearLayout>
</ScrollView>

【问题讨论】:

  • 您问题中的链接可能会显示共享偏好的单个键值,您是否尝试使用多个键值进行操作?你能把你所做的事情发布一下吗
  • 我是一个真正的菜鸟,所以我尝试了很多东西。但我只是想学习制作一个应用程序 ;-) 所以我希望你能迷惑我,我不知道我已经尝试过什么
  • 检查下面的解决方案。我已经发布了答案

标签: android android-edittext sharedpreferences


【解决方案1】:

您只需保存每个EditText 值并在下次Activity 重新加载时检索它们。下面的代码改编自您在问题中提到的链接:

public class PersonalInformation extends Activity{

private SharedPreferences savedFields;
private Button saveButton;
private EditText editText1;
private EditText editText2;
// Add all your EditTexts...

// Upon creating your Activity, reload all the saved values.
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.your_layout);

    saveButton = (Button) findViewById(R.id.your_save_button_id);
    editText1 = (EditText) findViewById(R.id.your_edit_text_1_id);
    editText2 = (EditText) findViewById(R.id.your_edit_text_2_id);
    // Keep adding all your EditTexts the same way...

    // "info" is just a tag name, use anything you like
    savedFields = getSharedPreferences("info", MODE_PRIVATE);

    // In case no value is already saved, use a Default Value
    editText1.setText(savednotes.getString("editText1", "Default Value 1"));
    editText2.setText(savednotes.getString("editText2", "Default Value 2"));

    // Save the changes upon button click
    saveButton.setOnClickListener(saveButtonListener);
}

public OnClickListener saveButtonListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        SharedPreferences.Editor preferencesEditor = savedFields.edit();
        if(editText1.getText().length() > 0) // Not empty
             preferencesEditor.putString("editText1", editText1.getText());
        if(editText2.getText().length() > 0) // Not empty
             preferencesEditor.putString("editText2", editText2.getText());
        // You can make a function so you woudn't have to repeat the same code for each EditText

        // At the end, save (commit) all the changes
        preferencesEditor.commit();
        }
    }
};
}

【讨论】:

  • 谢谢你,我会试试这个:-)
  • 感谢您的一些小调整,这就是解决方案。
【解决方案2】:

尝试将此存储在共享首选项中

   // MY_CONTAINER - a static String variable like: 
    //public static final String MY_CONTAINER  = "MyPrefsFile";
    SharedPreferences.Editor editor = getSharedPreferences(MY_CONTAINER , MODE_PRIVATE).edit();
     editor.putString("edittext1", "value1"); // you can also use like this editor.putString("edittext1", ed1.getText().toString())
     editor.putString("edittext2", "value2");
editor.putString("edittext3", "value3");
editor.putString("edittext4", "value4");
editor.putString("edittext5", "value5");
     editor.commit();

检索

SharedPreferences prefs = getSharedPreferences(MY_CONTAINER, MODE_PRIVATE); 
  String edit1 = prefs.getString("edittext1");
  String edit2 = prefs.getString("edittext2");
  String edit3 = prefs.getString("edittext3");
  String edit4 = prefs.getString("edittext4");
  String edit5 = prefs.getString("edittext5");

【讨论】:

  • 谢谢我也试试这个
猜你喜欢
  • 1970-01-01
  • 2012-02-21
  • 2014-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多