ฉันต้องการเก็บค่าเวลาและต้องดึงและแก้ไข ฉันSharedPreferences
จะใช้ทำสิ่งนี้ได้อย่างไร
ฉันต้องการเก็บค่าเวลาและต้องดึงและแก้ไข ฉันSharedPreferences
จะใช้ทำสิ่งนี้ได้อย่างไร
คำตอบ:
ในการรับการตั้งค่าที่แบ่งปันให้ใช้วิธีการต่อไปนี้ในกิจกรรมของคุณ:
SharedPreferences prefs = this.getSharedPreferences(
"com.example.app", Context.MODE_PRIVATE);
วิธีอ่านการตั้งค่า:
String dateTimeKey = "com.example.app.datetime";
// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime());
เพื่อแก้ไขและบันทึกการตั้งค่า
Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).apply();
ไดเรกทอรีตัวอย่างของ android sdk มีตัวอย่างของการดึงและจัดเก็บการตั้งค่าที่ใช้ร่วมกัน มันตั้งอยู่ใน:
<android-sdk-home>/samples/android-<platformversion>/ApiDemos directory
แก้ไข ==>
ฉันสังเกตเห็นมันเป็นสิ่งสำคัญที่จะต้องเขียนความแตกต่างระหว่างcommit()
และapply()
ที่นี่เช่นกัน
commit()
การกลับมาถ้าค่าการบันทึกเรียบร้อยแล้วมิฉะนั้นtrue
false
มันบันทึกค่าไปยัง SharedPreferences พร้อมกัน
apply()
ถูกเพิ่มใน 2.3 และไม่ส่งคืนค่าใด ๆ ไม่ว่าจะสำเร็จหรือล้มเหลว จะช่วยประหยัดค่า SharedPreferences ทันที แต่จะเป็นการเปิดตรงกันกระทำ รายละเอียดเพิ่มเติมได้ที่นี่
this.getSharedPreferences
ทำให้ฉันมีข้อผิดพลาดดังต่อไปนี้:The method getSharedPreferences(String, int) is undefined for the type MyActivity
ในการจัดเก็บค่าในการตั้งค่าที่ใช้ร่วมกัน:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Name","Harneet");
editor.apply();
ในการดึงค่าจากการตั้งค่าที่ใช้ร่วมกัน:
SharedPreferences preferences = PreferenceManager.getDefaultSharedPreferences(this);
String name = preferences.getString("Name", "");
if(!name.equalsIgnoreCase(""))
{
name = name + " Sethi"; /* Edit the value here*/
}
Map<DateTime, Integer>
อย่างไร
เพื่อแก้ไขข้อมูลจากsharedpreference
SharedPreferences.Editor editor = getPreferences(MODE_PRIVATE).edit();
editor.putString("text", mSaved.getText().toString());
editor.putInt("selection-start", mSaved.getSelectionStart());
editor.putInt("selection-end", mSaved.getSelectionEnd());
editor.apply();
เพื่อดึงข้อมูลจากsharedpreference
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
String restoredText = prefs.getString("text", null);
if (restoredText != null)
{
//mSaved.setText(restoredText, TextView.BufferType.EDITABLE);
int selectionStart = prefs.getInt("selection-start", -1);
int selectionEnd = prefs.getInt("selection-end", -1);
/*if (selectionStart != -1 && selectionEnd != -1)
{
mSaved.setSelection(selectionStart, selectionEnd);
}*/
}
แก้ไข
ฉันนำตัวอย่างนี้มาจากตัวอย่างการสาธิต API มันมีEditText
กล่องอยู่ที่นั่น ในสิ่งนี้context
มันไม่จำเป็นฉันกำลังแสดงความคิดเห็นแบบเดียวกัน
เขียน :
SharedPreferences preferences = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_WORLD_WRITEABLE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("Authentication_Id",userid.getText().toString());
editor.putString("Authentication_Password",password.getText().toString());
editor.putString("Authentication_Status","true");
editor.apply();
อ่าน :
SharedPreferences prfs = getSharedPreferences("AUTHENTICATION_FILE_NAME", Context.MODE_PRIVATE);
String Astatus = prfs.getString("Authentication_Status", "");
วิธีที่ง่ายที่สุด:
เพื่อบันทึก:
getPreferences(MODE_PRIVATE).edit().putString("Name of variable",value).commit();
ในการดึงข้อมูล:
your_variable = getPreferences(MODE_PRIVATE).getString("Name of variable",default value);
// MY_PREFS_NAME - a static String variable like:
//public static final String MY_PREFS_NAME = "MyPrefsFile";
SharedPreferences.Editor editor = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE).edit();
editor.putString("name", "Elena");
editor.putInt("idName", 12);
editor.commit();
SharedPreferences prefs = getSharedPreferences(MY_PREFS_NAME, MODE_PRIVATE);
String restoredText = prefs.getString("text", null);
if (restoredText != null) {
String name = prefs.getString("name", "No name defined");//"No name defined" is the default value.
int idName = prefs.getInt("idName", 0); //0 is the default value.
}
ข้อมูลเพิ่มเติม:
ชั้นเรียนการตั้งค่าที่ใช้ร่วมกัน Singleton มันอาจช่วยให้ผู้อื่นในอนาคต
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
public class SharedPref
{
private static SharedPreferences mSharedPref;
public static final String NAME = "NAME";
public static final String AGE = "AGE";
public static final String IS_SELECT = "IS_SELECT";
private SharedPref()
{
}
public static void init(Context context)
{
if(mSharedPref == null)
mSharedPref = context.getSharedPreferences(context.getPackageName(), Activity.MODE_PRIVATE);
}
public static String read(String key, String defValue) {
return mSharedPref.getString(key, defValue);
}
public static void write(String key, String value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putString(key, value);
prefsEditor.commit();
}
public static boolean read(String key, boolean defValue) {
return mSharedPref.getBoolean(key, defValue);
}
public static void write(String key, boolean value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putBoolean(key, value);
prefsEditor.commit();
}
public static Integer read(String key, int defValue) {
return mSharedPref.getInt(key, defValue);
}
public static void write(String key, Integer value) {
SharedPreferences.Editor prefsEditor = mSharedPref.edit();
prefsEditor.putInt(key, value).commit();
}
}
เพียงโทรSharedPref.init()
ในMainActivity
ครั้งเดียว
SharedPref.init(getApplicationContext());
เพื่อเขียนข้อมูล
SharedPref.write(SharedPref.NAME, "XXXX");//save string in shared preference.
SharedPref.write(SharedPref.AGE, 25);//save int in shared preference.
SharedPref.write(SharedPref.IS_SELECT, true);//save boolean in shared preference.
เพื่ออ่านข้อมูล
String name = SharedPref.read(SharedPref.NAME, null);//read string in shared preference.
int age = SharedPref.read(SharedPref.AGE, 0);//read int in shared preference.
boolean isSelect = SharedPref.read(SharedPref.IS_SELECT, false);//read boolean in shared preference.
เพื่อเก็บข้อมูล
SharedPreferences preferences = getSharedPreferences(PREFS_NAME,Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putString("username", username.getText().toString());
editor.putString("password", password.getText().toString());
editor.putString("logged", "logged");
editor.commit();
เพื่อรีเซ็ตค่ากำหนดของคุณ
SharedPreferences.Editor editor = preferences.edit();
editor.clear();
editor.commit();
หากคุณกำลังสร้างแอพพลิเคชั่นขนาดใหญ่ร่วมกับนักพัฒนาคนอื่น ๆ ในทีมของคุณและตั้งใจที่จะจัดระเบียบทุกอย่างให้ดีโดยไม่ต้องมีรหัสกระจัดกระจายหรืออินสแตนซ์ SharedPreferences อื่นคุณอาจทำสิ่งนี้:
//SharedPreferences manager class
public class SharedPrefs {
//SharedPreferences file name
private static String SHARED_PREFS_FILE_NAME = "my_app_shared_prefs";
//here you can centralize all your shared prefs keys
public static String KEY_MY_SHARED_BOOLEAN = "my_shared_boolean";
public static String KEY_MY_SHARED_FOO = "my_shared_foo";
//get the SharedPreferences object instance
//create SharedPreferences file if not present
private static SharedPreferences getPrefs(Context context) {
return context.getSharedPreferences(SHARED_PREFS_FILE_NAME, Context.MODE_PRIVATE);
}
//Save Booleans
public static void savePref(Context context, String key, boolean value) {
getPrefs(context).edit().putBoolean(key, value).commit();
}
//Get Booleans
public static boolean getBoolean(Context context, String key) {
return getPrefs(context).getBoolean(key, false);
}
//Get Booleans if not found return a predefined default value
public static boolean getBoolean(Context context, String key, boolean defaultValue) {
return getPrefs(context).getBoolean(key, defaultValue);
}
//Strings
public static void save(Context context, String key, String value) {
getPrefs(context).edit().putString(key, value).commit();
}
public static String getString(Context context, String key) {
return getPrefs(context).getString(key, "");
}
public static String getString(Context context, String key, String defaultValue) {
return getPrefs(context).getString(key, defaultValue);
}
//Integers
public static void save(Context context, String key, int value) {
getPrefs(context).edit().putInt(key, value).commit();
}
public static int getInt(Context context, String key) {
return getPrefs(context).getInt(key, 0);
}
public static int getInt(Context context, String key, int defaultValue) {
return getPrefs(context).getInt(key, defaultValue);
}
//Floats
public static void save(Context context, String key, float value) {
getPrefs(context).edit().putFloat(key, value).commit();
}
public static float getFloat(Context context, String key) {
return getPrefs(context).getFloat(key, 0);
}
public static float getFloat(Context context, String key, float defaultValue) {
return getPrefs(context).getFloat(key, defaultValue);
}
//Longs
public static void save(Context context, String key, long value) {
getPrefs(context).edit().putLong(key, value).commit();
}
public static long getLong(Context context, String key) {
return getPrefs(context).getLong(key, 0);
}
public static long getLong(Context context, String key, long defaultValue) {
return getPrefs(context).getLong(key, defaultValue);
}
//StringSets
public static void save(Context context, String key, Set<String> value) {
getPrefs(context).edit().putStringSet(key, value).commit();
}
public static Set<String> getStringSet(Context context, String key) {
return getPrefs(context).getStringSet(key, null);
}
public static Set<String> getStringSet(Context context, String key, Set<String> defaultValue) {
return getPrefs(context).getStringSet(key, defaultValue);
}
}
ในกิจกรรมของคุณคุณอาจบันทึก SharedPreferences ด้วยวิธีนี้
//saving a boolean into prefs
SharedPrefs.savePref(this, SharedPrefs.KEY_MY_SHARED_BOOLEAN, booleanVar);
และคุณสามารถดึง SharedPreferences ได้ด้วยวิธีนี้
//getting a boolean from prefs
booleanVar = SharedPrefs.getBoolean(this, SharedPrefs.KEY_MY_SHARED_BOOLEAN);
ในโปรแกรมใด ๆ ที่มีการตั้งค่าเริ่มต้นที่สามารถเข้าถึงได้ผ่านทางอินสแตนซ์และวิธีการที่เกี่ยวข้องPreferenceManager
getDefaultSharedPreferences(Context)
ด้วยSharedPreference
ตัวอย่างเช่นหนึ่งสามารถเรียกค่า int ของการตั้งค่าใด ๆ กับgetInt (String สำคัญ int defVal) การตั้งค่าที่เราสนใจในกรณีนี้คือตัวนับ
ในกรณีของเราเราสามารถแก้ไขSharedPreference
อินสแตนซ์ในกรณีของเราโดยใช้การแก้ไข () และใช้การputInt(String key, int newVal)
เราเพิ่มจำนวนสำหรับแอปพลิเคชันของเราที่มีอยู่นอกเหนือแอปพลิเคชันและแสดงตามนั้น
หากต้องการสาธิตเพิ่มเติมให้รีสตาร์ทและแอปพลิเคชันของคุณอีกครั้งคุณจะสังเกตเห็นว่าการนับจะเพิ่มขึ้นทุกครั้งที่คุณรีสตาร์ทแอปพลิเคชัน
PreferencesDemo.java
รหัส:
package org.example.preferences;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.widget.TextView;
public class PreferencesDemo extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Get the app's shared preferences
SharedPreferences app_preferences =
PreferenceManager.getDefaultSharedPreferences(this);
// Get the value for the run counter
int counter = app_preferences.getInt("counter", 0);
// Update the TextView
TextView text = (TextView) findViewById(R.id.text);
text.setText("This app has been started " + counter + " times.");
// Increment the counter
SharedPreferences.Editor editor = app_preferences.edit();
editor.putInt("counter", ++counter);
editor.commit(); // Very important
}
}
main.xml
รหัส:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<TextView
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
SharedPreferences
วิธีง่ายๆของวิธีการเก็บค่าเข้าสู่ระบบโดย
คุณสามารถขยายMainActivity
คลาสหรือคลาสอื่น ๆ ที่คุณจะเก็บ "คุณค่าของสิ่งที่คุณต้องการเก็บไว้" ใส่สิ่งนี้ลงในคลาสนักเขียนและผู้อ่าน:
public static final String GAME_PREFERENCES_LOGIN = "Login";
นี่InputClass
คืออินพุตและOutputClass
คลาสเอาต์พุตตามลำดับ
// This is a storage, put this in a class which you can extend or in both classes:
//(input and output)
public static final String GAME_PREFERENCES_LOGIN = "Login";
// String from the text input (can be from anywhere)
String login = inputLogin.getText().toString();
// then to add a value in InputCalss "SAVE",
SharedPreferences example = getSharedPreferences(GAME_PREFERENCES_LOGIN, 0);
Editor editor = example.edit();
editor.putString("value", login);
editor.commit();
ตอนนี้คุณสามารถใช้ที่อื่นเช่นคลาสอื่น OutputClass
ต่อไปนี้คือ
SharedPreferences example = getSharedPreferences(GAME_PREFERENCES_LOGIN, 0);
String userString = example.getString("value", "defValue");
// the following will print it out in console
Logger.getLogger("Name of a OutputClass".class.getName()).log(Level.INFO, userString);
ร้านค้าใน SharedPreferences
SharedPreferences preferences = getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
Editor editor = preferences.edit();
editor.putString("name", name);
editor.commit();
ดึงข้อมูลใน SharedPreferences
SharedPreferences preferences=getSharedPreferences("temp", getApplicationContext().MODE_PRIVATE);
String name=preferences.getString("name",null);
หมายเหตุ: "temp" คือชื่อการเปิดเผยล่วงหน้าและ "name" เป็นค่าที่ป้อนเข้า ถ้าค่าไม่ออกแล้วส่งคืนค่า null
แก้ไข
SharedPreferences pref = getSharedPreferences("YourPref", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString("yourValue", value);
editor.commit();
อ่าน
SharedPreferences pref = getSharedPreferences("YourPref", MODE_PRIVATE);
value= pref.getString("yourValue", "");
แนวคิดพื้นฐานของSharedPreferencesคือการจัดเก็บสิ่งต่าง ๆ บนไฟล์ XML
ประกาศพา ธ ไฟล์ xml ของคุณ (หากคุณไม่มีไฟล์นี้ Android จะสร้างมันขึ้นมาหากคุณมีไฟล์นี้ Android จะเข้าถึงไฟล์นี้)
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
เขียนค่าลงในการตั้งค่าที่ใช้ร่วมกัน
prefs.edit().putLong("preference_file_key", 1010101).apply();
preference_file_key
เป็นชื่อของไฟล์การตั้งค่าที่ใช้ร่วมกัน และ1010101
เป็นค่าที่คุณต้องการเก็บ
apply()
ในที่สุดคือการบันทึกการเปลี่ยนแปลง ถ้าคุณได้รับข้อผิดพลาดจากที่เปลี่ยนไปapply()
commit()
ดังนั้นประโยคทางเลือกนี้คือ
prefs.edit().putLong("preference_file_key", 1010101).commit();
อ่านจากการตั้งค่าที่ใช้ร่วมกัน
SharedPreferences sp = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
long lsp = sp.getLong("preference_file_key", -1);
lsp
จะเป็น-1
ถ้าpreference_file_key
ไม่มีค่า หาก 'preferences_file_key' มีค่ามันจะส่งคืนค่าของสิ่งนี้
รหัสทั้งหมดสำหรับการเขียนคือ
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE); // Declare xml file
prefs.edit().putLong("preference_file_key", 1010101).apply(); // Write the value to key.
รหัสสำหรับอ่านคือ
SharedPreferences sf = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE); // Declare xml file
long lsp = sp.getLong("preference_file_key", -1); // Read the key and store in lsp
คุณสามารถบันทึกค่าโดยใช้วิธีนี้:
public void savePreferencesForReasonCode(Context context,
String key, String value) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putString(key, value);
editor.commit();
}
และด้วยวิธีนี้คุณจะได้รับประโยชน์จาก SharedPreferences:
public String getPreferences(Context context, String prefKey) {
SharedPreferences sharedPreferences = PreferenceManager
.getDefaultSharedPreferences(context);
return sharedPreferences.getString(prefKey, "");
}
นี่prefKey
คือกุญแจสำคัญที่คุณใช้ในการบันทึกค่าเฉพาะ ขอบคุณ
editor.putString("text", mSaved.getText().toString());
ที่นี่mSaved
สามารถเป็นใดก็ได้TextView
หรือEditText
จากที่เราสามารถแยกสตริง คุณสามารถระบุสตริงได้ ข้อความนี่คือคีย์ที่เก็บค่าที่ได้จากmSaved
( TextView
หรือEditText
)
SharedPreferences prefs = this.getSharedPreferences("com.example.app", Context.MODE_PRIVATE);
และไม่จำเป็นต้องบันทึกไฟล์การกำหนดค่าตามความชอบโดยใช้ชื่อแพ็กเกจเช่น "com.example.app" คุณสามารถพูดถึงชื่อที่คุณต้องการ หวังว่านี่จะช่วยได้!
มีหลายวิธีที่คนแนะนำวิธีการใช้งานที่มีSharedPreferences ฉันได้ทำโครงการสาธิตที่นี่ จุดสำคัญในกลุ่มตัวอย่างคือการใช้ApplicationContext & sharedpreferences เดียววัตถุ นี่แสดงให้เห็นถึงวิธีการใช้SharedPreferencesด้วยคุณสมบัติดังต่อไปนี้: -
ตัวอย่างการใช้งานดังต่อไปนี้: -
MyAppPreference.getInstance().setSampleStringKey("some_value");
String value= MyAppPreference.getInstance().getSampleStringKey();
รับซอร์สโค้ดได้ที่นี่ & API แบบละเอียดสามารถดูได้ที่นี่บน developer.android.com
แนวปฏิบัติที่ดีที่สุดเลยทีเดียว
สร้างส่วนต่อประสานชื่อที่มีPreferenceManager :
// Interface to save values in shared preferences and also for retrieve values from shared preferences
public interface PreferenceManager {
SharedPreferences getPreferences();
Editor editPreferences();
void setString(String key, String value);
String getString(String key);
void setBoolean(String key, boolean value);
boolean getBoolean(String key);
void setInteger(String key, int value);
int getInteger(String key);
void setFloat(String key, float value);
float getFloat(String key);
}
วิธีใช้กับกิจกรรม / แฟรกเมนต์ :
public class HomeActivity extends AppCompatActivity implements PreferenceManager{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout_activity_home);
}
@Override
public SharedPreferences getPreferences(){
return getSharedPreferences("SP_TITLE", Context.MODE_PRIVATE);
}
@Override
public SharedPreferences.Editor editPreferences(){
return getPreferences().edit();
}
@Override
public void setString(String key, String value) {
editPreferences().putString(key, value).commit();
}
@Override
public String getString(String key) {
return getPreferences().getString(key, "");
}
@Override
public void setBoolean(String key, boolean value) {
editPreferences().putBoolean(key, value).commit();
}
@Override
public boolean getBoolean(String key) {
return getPreferences().getBoolean(key, false);
}
@Override
public void setInteger(String key, int value) {
editPreferences().putInt(key, value).commit();
}
@Override
public int getInteger(String key) {
return getPreferences().getInt(key, 0);
}
@Override
public void setFloat(String key, float value) {
editPreferences().putFloat(key, value).commit();
}
@Override
public float getFloat(String key) {
return getPreferences().getFloat(key, 0);
}
}
หมายเหตุ: การเปลี่ยนที่สำคัญของคุณของ SharedPreference กับSP_TITLE
ตัวอย่าง:
จัดเก็บสตริงในส่วนแบ่ง :
setString("my_key", "my_value");
รับสายจากshareperence :
String strValue = getString("my_key");
หวังว่านี่จะช่วยคุณได้
ในการจัดเก็บค่าในการตั้งค่าที่ใช้ร่วมกัน:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
SharedPreferences.Editor editor = sp.edit();
editor.putString("Name","Jayesh");
editor.commit();
ในการดึงค่าจากการตั้งค่าที่ใช้ร่วมกัน:
SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(this);
String name = sp.getString("Name", ""); // Second parameter is the default value.
เพื่อบันทึก
PreferenceManager.getDefaultSharedPreferences(this).edit().putString("VarName","your value").apply();
เพื่อตอบโต้:
String name = PreferenceManager.getDefaultSharedPreferences(this).getString("VarName","defaultValue");
ค่าเริ่มต้นคือ: ค่าที่จะส่งคืนหากไม่มีการกำหนดลักษณะนี้
คุณสามารถเปลี่ยน " this " ด้วยgetActivity ()หรือgetApplicationContext ()ในบางกรณี
ฉันเขียนชั้นผู้ช่วยสำหรับการแชร์ล่วงหน้า:
import android.content.Context;
import android.content.SharedPreferences;
/**
* Created by mete_ on 23.12.2016.
*/
public class HelperSharedPref {
Context mContext;
public HelperSharedPref(Context mContext) {
this.mContext = mContext;
}
/**
*
* @param key Constant RC
* @param value Only String, Integer, Long, Float, Boolean types
*/
public void saveToSharedPref(String key, Object value) throws Exception {
SharedPreferences.Editor editor = mContext.getSharedPreferences(key, Context.MODE_PRIVATE).edit();
if (value instanceof String) {
editor.putString(key, (String) value);
} else if (value instanceof Integer) {
editor.putInt(key, (Integer) value);
} else if (value instanceof Long) {
editor.putLong(key, (Long) value);
} else if (value instanceof Float) {
editor.putFloat(key, (Float) value);
} else if (value instanceof Boolean) {
editor.putBoolean(key, (Boolean) value);
} else {
throw new Exception("Unacceptable object type");
}
editor.commit();
}
/**
* Return String
* @param key
* @return null default is null
*/
public String loadStringFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
String restoredText = prefs.getString(key, null);
return restoredText;
}
/**
* Return int
* @param key
* @return null default is -1
*/
public Integer loadIntegerFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Integer restoredText = prefs.getInt(key, -1);
return restoredText;
}
/**
* Return float
* @param key
* @return null default is -1
*/
public Float loadFloatFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Float restoredText = prefs.getFloat(key, -1);
return restoredText;
}
/**
* Return long
* @param key
* @return null default is -1
*/
public Long loadLongFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Long restoredText = prefs.getLong(key, -1);
return restoredText;
}
/**
* Return boolean
* @param key
* @return null default is false
*/
public Boolean loadBooleanFromSharedPref(String key) throws Exception {
SharedPreferences prefs = mContext.getSharedPreferences(key, Context.MODE_PRIVATE);
Boolean restoredText = prefs.getBoolean(key, false);
return restoredText;
}
}
ใช้ใช้ตัวอย่างนี้ง่ายและชัดเจนและตรวจสอบ
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.sairamkrishna.myapplication" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
public class MainActivity extends AppCompatActivity {
EditText ed1,ed2,ed3;
Button b1;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String Name = "nameKey";
public static final String Phone = "phoneKey";
public static final String Email = "emailKey";
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ed1=(EditText)findViewById(R.id.editText);
ed2=(EditText)findViewById(R.id.editText2);
ed3=(EditText)findViewById(R.id.editText3);
b1=(Button)findViewById(R.id.button);
sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String n = ed1.getText().toString();
String ph = ed2.getText().toString();
String e = ed3.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(Name, n);
editor.putString(Phone, ph);
editor.putString(Email, e);
editor.commit();
Toast.makeText(MainActivity.this,"Thanks",Toast.LENGTH_LONG).show();
}
});
}
}
ใช้ไลบรารีอย่างง่ายนี่คือวิธีที่คุณโทรไปยัง SharedPreferences
TinyDB tinydb = new TinyDB(context);
tinydb.putInt("clickCount", 2);
tinydb.putString("userName", "john");
tinydb.putBoolean("isUserMale", true);
tinydb.putList("MyUsers", mUsersArray);
tinydb.putImagePNG("DropBox/WorkImages", "MeAtlunch.png", lunchBitmap);
//These plus the corresponding get methods are all Included
ฉันต้องการเพิ่มที่นี่ว่าตัวอย่างข้อมูลส่วนใหญ่สำหรับคำถามนี้จะมีอะไรบางอย่างเช่น MODE_PRIVATE เมื่อใช้ SharedPreferences ดี MODE_PRIVATE หมายความว่าสิ่งที่คุณเขียนลงในการตั้งค่าที่ใช้ร่วมกันนี้สามารถอ่านได้โดยแอปพลิเคชันของคุณเท่านั้น
สิ่งที่สำคัญที่คุณส่งผ่านไปยังเมธอด getSharedPreferences () แอนดรอยด์จะสร้างไฟล์ที่มีชื่อนั้นและเก็บข้อมูลการตั้งค่าไว้ โปรดจำไว้ด้วยว่าควรจะใช้ getSharedPreferences () เมื่อคุณต้องการให้มีไฟล์การกำหนดค่าตามความชอบหลายไฟล์สำหรับแอปพลิเคชันของคุณ หากคุณต้องการใช้ไฟล์การกำหนดค่าตามความชอบเดียวและเก็บคู่คีย์ - ค่าทั้งหมดไว้ในนั้นให้ใช้เมธอด getSharedPreference () มันแปลก ๆ ว่าทำไมทุกคน (รวมถึงตัวฉันเอง) ก็ใช้ getSharedPreferences () รสชาติโดยไม่เข้าใจความแตกต่างระหว่างสองอย่างนี้
วิดีโอแนะนำต่อไปนี้ควรช่วย https://www.youtube.com/watch?v=2PcAQ1NBy98
ดีกว่าไม่สาย: ฉันสร้าง"การปฏิบัติการ Android SharedPreferences-Helper" ห้องสมุดSharedPreferences
เพื่อช่วยลดความซับซ้อนและความพยายามในการใช้ นอกจากนี้ยังมีฟังก์ชั่นเพิ่มเติมบางส่วน มีบางสิ่งที่มันมีดังนี้:
- การกำหนดค่าเริ่มต้นและการตั้งค่าหนึ่งบรรทัด
- เลือกได้อย่างง่ายดายว่าจะใช้การกำหนดลักษณะเริ่มต้นหรือไฟล์กำหนดเองที่ต้องการ
- ที่กำหนดไว้ล่วงหน้า (ค่าเริ่มต้นประเภทข้อมูล) และปรับแต่ง (สิ่งที่คุณอาจเลือก) ค่าเริ่มต้นสำหรับแต่ละประเภทข้อมูล
- ความสามารถในการตั้งค่าเริ่มต้นที่แตกต่างกันสำหรับการใช้งานเพียงครั้งเดียวด้วยพารามิเตอร์เพิ่มเติม
- คุณสามารถลงทะเบียนและยกเลิกการลงทะเบียน OnSharedPreferenceChangeListener เช่นเดียวกับคลาสเริ่มต้น
dependencies {
...
...
compile(group: 'com.viralypatel.sharedpreferenceshelper', name: 'library', version: '1.1.0', ext: 'aar')
}
การประกาศของวัตถุ SharedPreferencesHelper: (แนะนำในระดับชั้นเรียน)
SharedPreferencesHelper sph;
การสร้างอินสแตนซ์ของวัตถุ SharedPreferencesHelper: (แนะนำในวิธี onCreate ())
// use one of the following ways to instantiate
sph = new SharedPreferencesHelper(this); //this will use default shared preferences
sph = new SharedPreferencesHelper(this, "myappprefs"); // this will create a named shared preference file
sph = new SharedPreferencesHelper(this, "myappprefs", 0); // this will allow you to specify a mode
ใส่ค่าลงในการตั้งค่าที่ใช้ร่วมกัน
ค่อนข้างง่าย! ไม่เหมือนกับวิธีเริ่มต้น (เมื่อใช้คลาส SharedPreferences) คุณไม่จำเป็นต้องโทร.edit()
และ.commit()
เวลาเลย
sph.putBoolean("boolKey", true);
sph.putInt("intKey", 123);
sph.putString("stringKey", "string value");
sph.putLong("longKey", 456876451);
sph.putFloat("floatKey", 1.51f);
// putStringSet is supported only for android versions above HONEYCOMB
Set name = new HashSet();
name.add("Viral");
name.add("Patel");
sph.putStringSet("name", name);
แค่นั้นแหละ! ค่าของคุณจะถูกเก็บไว้ในการตั้งค่าที่ใช้ร่วมกัน
การรับค่าจากการตั้งค่าที่ใช้ร่วมกัน
อีกครั้งเพียงวิธีการโทรง่าย ๆ ที่มีชื่อคีย์
sph.getBoolean("boolKey");
sph.getInt("intKey");
sph.getString("stringKey");
sph.getLong("longKey");
sph.getFloat("floatKey");
// getStringSet is supported only for android versions above HONEYCOMB
sph.getStringSet("name");
มันมีฟังก์ชั่นเพิ่มเติมอื่น ๆ อีกมากมาย
ตรวจสอบรายละเอียดของการขยายการทำงาน, การใช้และคำแนะนำการติดตั้ง ฯลฯ บนGitHub Repository หน้า
SharedPreferences.Editor editor = getSharedPreferences("identifier",
MODE_PRIVATE).edit();
//identifier is the unique to fetch data from your SharedPreference.
editor.putInt("keyword", 0);
// saved value place with 0.
//use this "keyword" to fetch saved value again.
editor.commit();//important line without this line your value is not stored in preference
// fetch the stored data using ....
SharedPreferences prefs = getSharedPreferences("identifier", MODE_PRIVATE);
// here both identifier will same
int fetchvalue = prefs.getInt("keyword", 0);
// here keyword will same as used above.
// 0 is default value when you nothing save in preference that time fetch value is 0.
คุณต้องใช้ SharedPreferences ใน AdapterClass หรืออื่น ๆ เวลานั้นใช้การประกาศนี้และใช้ลาเดียวกันข้างต้น
SharedPreferences.Editor editor = context.getSharedPreferences("idetifier",
Context.MODE_PRIVATE).edit();
SharedPreferences prefs = context.getSharedPreferences("identifier", Context.MODE_PRIVATE);
//here context is your application context
สำหรับสตริงหรือค่าบูลีน
editor.putString("stringkeyword", "your string");
editor.putBoolean("booleankeyword","your boolean value");
editor.commit();
ดึงข้อมูลเหมือนข้างต้น
String fetchvalue = prefs.getString("keyword", "");
Boolean fetchvalue = prefs.getBoolean("keyword", "");
2. สำหรับการจัดเก็บใน prefrence ที่ใช้ร่วมกัน
SharedPreferences.Editor editor =
getSharedPreferences("DeviceToken",MODE_PRIVATE).edit();
editor.putString("DeviceTokenkey","ABABABABABABABB12345");
editor.apply();
2. สำหรับการดึงข้อมูลการใช้งานเดิม
SharedPreferences prefs = getSharedPreferences("DeviceToken",
MODE_PRIVATE);
String deviceToken = prefs.getString("DeviceTokenkey", null);
ที่นี่ฉันได้สร้างคลาส Helper เพื่อใช้การตั้งค่าใน Android
นี่คือคลาสตัวช่วย:
public class PrefsUtil {
public static SharedPreferences getPreference() {
return PreferenceManager.getDefaultSharedPreferences(Applicatoin.getAppContext());
}
public static void putBoolean(String key, boolean value) {
getPreference().edit().putBoolean(key, value)
.apply();
}
public static boolean getBoolean(String key) {
return getPreference().getBoolean(key, false);
}
public static void putInt(String key, int value) {
getPreference().edit().putInt(key, value).apply();
}
public static void delKey(String key) {
getPreference().edit().remove(key).apply();
}
}
เพื่อจัดเก็บและดึงตัวแปรทั่วโลกในลักษณะการทำงาน ในการทดสอบตรวจสอบให้แน่ใจว่าคุณมีรายการ Textview ในหน้าของคุณโดยไม่ใส่หมายเหตุสองบรรทัดในรหัสและเรียกใช้ จากนั้นคอมเม้นท์สองบรรทัดอีกครั้งแล้วรัน
ที่นี่ id ของ TextView คือชื่อผู้ใช้และรหัสผ่าน
ในทุก ๆ คลาสที่คุณต้องการใช้ให้เพิ่มสองรูทีนเหล่านี้ในตอนท้าย ฉันต้องการให้รูทีนนี้เป็นรูทีนโกลบอล แต่ไม่ทราบว่าต้องทำอย่างไร วิธีนี้ใช้ได้ผล
ชุดรูปแบบมีอยู่ทุกที่ มันเก็บตัวแปรใน "MyFile" คุณอาจเปลี่ยนวิธีของคุณ
คุณเรียกมันว่าใช้
storeSession("username","frans");
storeSession("password","!2#4%");***
ชื่อผู้ใช้ตัวแปรจะถูกเติมด้วย "frans" และรหัสผ่านด้วย "! 2 # 4%" แม้จะมีการรีสตาร์ทก็ตาม
และคุณดึงข้อมูลโดยใช้
password.setText(getSession(("password")));
usernames.setText(getSession(("username")));
ด้านล่างรหัสทั้งหมดของ grid.java ของฉัน
package nl.yentel.yenteldb2;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
public class Grid extends AppCompatActivity {
private TextView usernames;
private TextView password;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_grid);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
***// storeSession("username","frans.eilering@gmail.com");
//storeSession("password","mijn wachtwoord");***
password = (TextView) findViewById(R.id.password);
password.setText(getSession(("password")));
usernames=(TextView) findViewById(R.id.username);
usernames.setText(getSession(("username")));
}
public void storeSession(String key, String waarde) {
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
editor.putString(key, waarde);
editor.commit();
}
public String getSession(String key) {
//http://androidexample.com/Android_SharedPreferences_Basics/index.php?view=article_discription&aid=126&aaid=146
SharedPreferences pref = getApplicationContext().getSharedPreferences("MyFile", MODE_PRIVATE);
SharedPreferences.Editor editor = pref.edit();
String output = pref.getString(key, null);
return output;
}
}
ด้านล่างคุณจะพบรายการข้อความ
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="usernames"
android:id="@+id/username"
android:layout_below="@+id/textView"
android:layout_alignParentStart="true"
android:layout_marginTop="39dp"
android:hint="hier komt de username" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="password"
android:id="@+id/password"
android:layout_below="@+id/user"
android:layout_alignParentStart="true"
android:hint="hier komt het wachtwoord" />
ฉันได้สร้างคลาสผู้ช่วยเพื่อทำให้ชีวิตของฉันง่ายขึ้น นี่เป็นคลาสทั่วไปและมีวิธีการมากมายที่ใช้กันทั่วไปในแอปเช่นการตั้งค่าที่ใช้ร่วมกันความถูกต้องของอีเมลรูปแบบเวลาวันที่ คัดลอกคลาสนี้ในรหัสของคุณและเข้าถึงวิธีการทุกที่ที่คุณต้องการ
import android.app.AlertDialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.support.v4.app.FragmentActivity;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
import android.widget.Toast;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;
/**
* Created by Zohaib Hassan on 3/4/2016.
*/
public class Helper {
private static ProgressDialog pd;
public static void saveData(String key, String value, Context context) {
SharedPreferences sp = context.getApplicationContext()
.getSharedPreferences("appData", 0);
SharedPreferences.Editor editor;
editor = sp.edit();
editor.putString(key, value);
editor.commit();
}
public static void deleteData(String key, Context context){
SharedPreferences sp = context.getApplicationContext()
.getSharedPreferences("appData", 0);
SharedPreferences.Editor editor;
editor = sp.edit();
editor.remove(key);
editor.commit();
}
public static String getSaveData(String key, Context context) {
SharedPreferences sp = context.getApplicationContext()
.getSharedPreferences("appData", 0);
String data = sp.getString(key, "");
return data;
}
public static long dateToUnix(String dt, String format) {
SimpleDateFormat formatter;
Date date = null;
long unixtime;
formatter = new SimpleDateFormat(format);
try {
date = formatter.parse(dt);
} catch (Exception ex) {
ex.printStackTrace();
}
unixtime = date.getTime();
return unixtime;
}
public static String getData(long unixTime, String formate) {
long unixSeconds = unixTime;
Date date = new Date(unixSeconds);
SimpleDateFormat sdf = new SimpleDateFormat(formate);
String formattedDate = sdf.format(date);
return formattedDate;
}
public static String getFormattedDate(String date, String currentFormat,
String desiredFormat) {
return getData(dateToUnix(date, currentFormat), desiredFormat);
}
public static double distance(double lat1, double lon1, double lat2,
double lon2, char unit) {
double theta = lon1 - lon2;
double dist = Math.sin(deg2rad(lat1)) * Math.sin(deg2rad(lat2))
+ Math.cos(deg2rad(lat1)) * Math.cos(deg2rad(lat2))
* Math.cos(deg2rad(theta));
dist = Math.acos(dist);
dist = rad2deg(dist);
dist = dist * 60 * 1.1515;
if (unit == 'K') {
dist = dist * 1.609344;
} else if (unit == 'N') {
dist = dist * 0.8684;
}
return (dist);
}
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :: This function converts decimal degrees to radians : */
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
private static double deg2rad(double deg) {
return (deg * Math.PI / 180.0);
}
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
/* :: This function converts radians to decimal degrees : */
/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */
private static double rad2deg(double rad) {
return (rad * 180.0 / Math.PI);
}
public static int getRendNumber() {
Random r = new Random();
return r.nextInt(360);
}
public static void hideKeyboard(Context context, EditText editText) {
InputMethodManager imm = (InputMethodManager) context
.getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);
}
public static void showLoder(Context context, String message) {
pd = new ProgressDialog(context);
pd.setCancelable(false);
pd.setMessage(message);
pd.show();
}
public static void showLoderImage(Context context, String message) {
pd = new ProgressDialog(context);
pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
pd.setCancelable(false);
pd.setMessage(message);
pd.show();
}
public static void dismissLoder() {
pd.dismiss();
}
public static void toast(Context context, String text) {
Toast.makeText(context, text, Toast.LENGTH_LONG).show();
}
/*
public static Boolean connection(Context context) {
ConnectionDetector connection = new ConnectionDetector(context);
if (!connection.isConnectingToInternet()) {
Helper.showAlert(context, "No Internet access...!");
//Helper.toast(context, "No internet access..!");
return false;
} else
return true;
}*/
public static void removeMapFrgment(FragmentActivity fa, int id) {
android.support.v4.app.Fragment fragment;
android.support.v4.app.FragmentManager fm;
android.support.v4.app.FragmentTransaction ft;
fm = fa.getSupportFragmentManager();
fragment = fm.findFragmentById(id);
ft = fa.getSupportFragmentManager().beginTransaction();
ft.remove(fragment);
ft.commit();
}
public static AlertDialog showDialog(Context context, String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage(message);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// TODO Auto-generated method stub
}
});
return builder.create();
}
public static void showAlert(Context context, String message) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("Alert");
builder.setMessage(message)
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
dialog.dismiss();
}
}).show();
}
public static boolean isURL(String url) {
if (url == null)
return false;
boolean foundMatch = false;
try {
Pattern regex = Pattern
.compile(
"\\b(?:(https?|ftp|file)://|www\\.)?[-A-Z0-9+&#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]\\.[-A-Z0-9+&@#/%?=~_|$!:,.;]*[A-Z0-9+&@#/%=~_|$]",
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher regexMatcher = regex.matcher(url);
foundMatch = regexMatcher.matches();
return foundMatch;
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
return false;
}
}
public static boolean atLeastOneChr(String string) {
if (string == null)
return false;
boolean foundMatch = false;
try {
Pattern regex = Pattern.compile("[a-zA-Z0-9]",
Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
Matcher regexMatcher = regex.matcher(string);
foundMatch = regexMatcher.matches();
return foundMatch;
} catch (PatternSyntaxException ex) {
// Syntax error in the regular expression
return false;
}
}
public static boolean isValidEmail(String email, Context context) {
String expression = "^[\\w\\.-]+@([\\w\\-]+\\.)+[A-Z]{2,4}$";
CharSequence inputStr = email;
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
return true;
} else {
// Helper.toast(context, "Email is not valid..!");
return false;
}
}
public static boolean isValidUserName(String email, Context context) {
String expression = "^[0-9a-zA-Z]+$";
CharSequence inputStr = email;
Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(inputStr);
if (matcher.matches()) {
return true;
} else {
Helper.toast(context, "Username is not valid..!");
return false;
}
}
public static boolean isValidDateSlash(String inDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/mm/yyyy");
dateFormat.setLenient(false);
try {
dateFormat.parse(inDate.trim());
} catch (ParseException pe) {
return false;
}
return true;
}
public static boolean isValidDateDash(String inDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-mm-yyyy");
dateFormat.setLenient(false);
try {
dateFormat.parse(inDate.trim());
} catch (ParseException pe) {
return false;
}
return true;
}
public static boolean isValidDateDot(String inDate) {
SimpleDateFormat dateFormat = new SimpleDateFormat("dd.mm.yyyy");
dateFormat.setLenient(false);
try {
dateFormat.parse(inDate.trim());
} catch (ParseException pe) {
return false;
}
return true;
}
}