PDA

View Full Version : بکاپ گرفتن از SharedPreferences



ali-star
جمعه 22 فروردین 1393, 13:32 عصر
سلام دوستان

امروز داشتم دنبال یه روش برای بکاپ گرفتن از SharedPreferences می گشتم که کد زیر رو دیدم.

private boolean saveSharedPreferencesToFile(File dst) {
boolean res = false;
ObjectOutputStream output = null;
try {
output = new ObjectOutputStream(new FileOutputStream(dst));
SharedPreferences pref =
getSharedPreferences(prefName, MODE_PRIVATE);
output.writeObject(pref.getAll());

res = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}finally {
try {
if (output != null) {
output.flush();
output.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return res;
}

@SuppressWarnings({ "unchecked" })
private boolean loadSharedPreferencesFromFile(File src) {
boolean res = false;
ObjectInputStream input = null;
try {
input = new ObjectInputStream(new FileInputStream(src));
Editor prefEdit = getSharedPreferences(prefName, MODE_PRIVATE).edit();
prefEdit.clear();
Map<String, ?> entries = (Map<String, ?>) input.readObject();
for (Entry<String, ?> entry : entries.entrySet()) {
Object v = entry.getValue();
String key = entry.getKey();

if (v instanceof Boolean)
prefEdit.putBoolean(key, ((Boolean) v).booleanValue());
else if (v instanceof Float)
prefEdit.putFloat(key, ((Float) v).floatValue());
else if (v instanceof Integer)
prefEdit.putInt(key, ((Integer) v).intValue());
else if (v instanceof Long)
prefEdit.putLong(key, ((Long) v).longValue());
else if (v instanceof String)
prefEdit.putString(key, ((String) v));
}
prefEdit.commit();
res = true;
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
try {
if (input != null) {
input.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
return res;
}

برای ذخیره و رستور کردن هم از دو کد زیر رو به کار می بریم:

saveSharedPreferencesToFile(dst);

loadSharedPreferencesFromFile(src);

ولی چون من با ذخیره اطلاعات و ... روی sd زیاد آشنایی ندارم نمیدونم به جای dst و src از چه کدی استفاده کنم.:متفکر:
دوستان میشه راهنمایی کنید؟

smemamian
جمعه 22 فروردین 1393, 14:40 عصر
File mainDir = new File(Environment.getExternalStorageDirectory()
+ "/YourDir");
if (!mainDir.exists())
mainDir.mkdir();

mainDir رو به تابع ارسال کنید.
مجوز:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

ولی سوال؟
چرا می خوای تنظیمات رو ذخیره کنی؟ اگه بخاطره بروزرسانی نرم افزارتون می خواهی این کار رو بکنی،
نیازی ندارید. چون بعد از بروزرسانی هم تنظیمات SP، همان تنظیمات قبل هستند. (از بین نمی روند.)

از لحاظ امنیتی اصلاً توصیه نمیشه، مگر اینکه از رمزنگاری خاصی استفاده کنید.

ali-star
جمعه 22 فروردین 1393, 15:27 عصر
نه من می خوام قابلیت پشتیبانی گیری تو نرم افزارم قرار بدم و چون بیشتر از SP توی نرم افزارم استفاده کردم میخوام کاربر بتونه ازشون بکاپ بگیره...

ali-star
جمعه 22 فروردین 1393, 15:33 عصر
به نظر شما به جای "/YourDir" بهتره از چی استفاده کنم لازم هست "/sdcard" بزارم بعضی جاها گفتن اصلا توصیه نیشه...

ali-star
جمعه 22 فروردین 1393, 15:42 عصر
پوشه ساخته میشه ولی فایلی توش نیست رستور هم که می زنم هیچی نمیشه...

#root#
جمعه 22 فروردین 1393, 15:52 عصر
به نظر شما به جای "/YourDir" بهتره از چی استفاده کنم لازم هست "/sdcard" بزارم بعضی جاها گفتن اصلا توصیه نیشه...

ای کاش همه برنامه نویس ها یه پوشه در sdcard/data میساختن تا sdcard شلوغ نشه ، الان که به مموری گوشی نگاه میکنم شبیه پوشه system32 ویندوزه :افسرده:

ali-star
جمعه 22 فروردین 1393, 16:16 عصر
این زیاد برام مهم نیست ولی فایل توی پوشه ساخته نمیشه میشه رانمایی کنید...

smemamian
جمعه 22 فروردین 1393, 18:58 عصر
این رو که از قبل داشتی :
File mainDir = new File(Environment.getExternalStorageDirectory()

+ "/YourDir");
if (!mainDir.exists())
mainDir.mkdir();




این یک فایل به اسم yourfile.txt در مسیر گفته شده در بالا می سازه :

final File file = new File(mainDir,"yourfile.txt");

try {
FileWriter writer = new FileWriter(file);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

Button btn = (Button)findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
saveSharedPreferencesToFile(file);
}
});

ali-star
جمعه 22 فروردین 1393, 19:11 عصر
خیلی ممنون ولی خودم مشکل خودمو حل کردم...

--- حل شد ---