java - 如何使用共享首选项保存多个数据?
问题描述
我正在制作一个应用程序,在此活动中,我试图从用户那里获取数据并使用共享首选项保存它。但是单击注册按钮时应用程序崩溃。
这是 SignUpActivity.java 文件 -
package com.example.abinas.myapplication;
import android.content.Context;
import android.content.SharedPreferences;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.RadioButton;
import android.widget.RadioGroup;
public class SignUpActivity extends AppCompatActivity {
private EditText e3;
private EditText e4;
private EditText e5;
private EditText e6;
private Button b2;
private RadioGroup rg;
private RadioButton rb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sign_up);
rg = (RadioGroup)findViewById(R.id.radioroup);
e3 = (EditText)findViewById(R.id.editText3);
e4 = (EditText)findViewById(R.id.editText4);
e5 = (EditText)findViewById(R.id.editText5);
e6 = (EditText)findViewById(R.id.editText6);
b2 = (Button)findViewById(R.id.button2);
int selected_id = rg.getCheckedRadioButtonId();
rb = (RadioButton)findViewById(selected_id);
}
public void onButtonClick(View view){
final SharedPreferences pref;
pref = getSharedPreferences("user_info",Context.MODE_PRIVATE);
SharedPreferences.Editor edit = pref.edit();
edit.putString("gender",rb.getText().toString());
edit.putString("username",e4.getText().toString());
edit.putString("name",e3.getText().toString());
edit.putString("password",e5.getText().toString());
edit.putInt("phone",Integer.parseInt(e6.getText().toString()));
edit.apply();
edit.commit();
//b2.setText("SAVED");
//b2.setClickable(false);
}
}
应该进行哪些更改才能成功保存数据?
解决方案
1. Create a public class SharedPreference Manager and a class Keystring that will contain multiple data like name, user name , password, phone number.
2. Then create object of this class anywhere in the project
3. Get and put value easily anywhere
共享偏好管理器
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
public class SharedPreferenceManager {
protected Context mContext;
protected SharedPreferences mSettings;
protected Editor mEditor;
public SharedPreferenceManager(Context ctx, String prefFileName) {
mContext = ctx;
mSettings = mContext.getSharedPreferences(prefFileName,
Context.MODE_PRIVATE);
mEditor = mSettings.edit();
}
/***
* Set a value for the key
****/
public void setValue(String key, String value) {
mEditor.putString(key, value);
mEditor.commit();
}
/***
* Set a value for the key
****/
public void setValue(String key, int value) {
mEditor.putInt(key, value);
mEditor.commit();
}
/***
* Set a value for the key
****/
public void setValue(String key, double value) {
setValue(key, Double.toString(value));
}
/***
* Set a value for the key
****/
public void setValue(String key, long value) {
mEditor.putLong(key, value);
mEditor.commit();
}
/****
* Gets the value from the settings stored natively on the device.
*
* @param defaultValue Default value for the key, if one is not found.
**/
public String getValue(String key, String defaultValue) {
return mSettings.getString(key, defaultValue);
}
public int getIntValue(String key, int defaultValue) {
return mSettings.getInt(key, defaultValue);
}
public long getLongValue(String key, long defaultValue) {
return mSettings.getLong(key, defaultValue);
}
/****
* Gets the value from the preferences stored natively on the device.
*
* @param defValue Default value for the key, if one is not found.
**/
public boolean getValue(String key, boolean defValue) {
return mSettings.getBoolean(key, defValue);
}
public void setValue(String key, boolean value) {
mEditor.putBoolean(key, value);
mEditor.commit();
}
/**
* Clear all the preferences store in this {@link android.content.SharedPreferences.Editor}
*/
public boolean clear() {
try {
mEditor.clear().commit();
return true;
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* Removes preference entry for the given key.
*
* @param key
*/
public void removeValue(String key) {
if (mEditor != null) {
mEditor.remove(key).commit();
}
}
}
钥匙串
public class KeyString {
public static String PREFERENCE_NAME ="APP_PREF";
public static String NAME="NAME";
public static String USER_NAME="USER_NAME";
public static String PHONE_NUMBER="PHONE_NUMBER";
public static String PASSWORD="PASSWORD";
public static String USER_ID="USER_ID";
}
在项目任何地方的任何活动中##
private SharedPreferenceManager preferenceManager=new new SharedPreferenceManager(context, KeyString.PREFERENCE_NAME);
现在设置一些值
preferenceManager.setValue(KeyString.PHONE_NUMBER,"01714262873");
从首选项获取数据
String phoneNumber=preferenceManager.getValue(KeyString.PHONE_NUMBER,""); //default value ""
通过这种方法,您可以设置和获取所需数量的变量和值。只需添加 keyString 和 play.happy 编码..
推荐阅读
- sql-server - 表中同时插入的记录可以重叠吗?
- python - 1048, "列 'user_id' 不能为空"
- javascript - 未捕获的错误:不允许 https://127.0.0.1:9002 覆盖此店面。在 webApplicationInjector.js:4
- javascript - Chart.js 在传递动态标签时不显示数据
- android - 自 Android Studio 3.6 以来,apk 大小和 zip 对齐方式发生了什么变化?
- image - 我可以使用哪个软件来跟踪颜色百分比?
- graph-theory - 加权无向完全图的最小星森林
- c# - 如何在 moq 设置中设置通用参数?
- python - 如何在 python 中从谷歌搜索中排除某些网站?
- javascript - React Native Image uri在Android和IOS上的不同行为?