اندازهی قلم متن
تخمین مدت زمان مطالعهی مطلب:
سه دقیقه
ذخیره دادهها در اندروید
اندروید برنامههای کاربردی را در زمینهی (context) امنیت جداگانهای اجرا و برای اجرای آنها زمینههای خاصی را در سیستم عامل تعیین تکلیف میکند و این برای ما کاملا شفاف است که در این سیستم عامل بزرگ و گسترده چه تدابیری ارائه شده است. این بدان معنا است که هر برنامه با UID و GID خود اجرا خواهد شد. برای مثال زمانیکه در یک برنامه اطلاعاتی را مینویسید، برنامههای دیگر قادر نخواهند بود آن دادهها را بخوانند.
اگر میخواهید اطلاعاتی را بین برنامهها به اشتراک بگذارید، پس باید به صراحت این اشتراک گذاری را با استفاده از یک تامینکننده محتوا به اشتراک بگذارید تا امنیت قابل توجهی بین آنها ایجاد شود. اندروید به شما اجازه میدهد تا دادهها را با استفاده از پنج گزینه مختلف ذخیره کنید. این شما هستید که باید تصمیم بگیرید که چگونه دادههای خاص خود را براساس الزامات پروژه ذخیره کنید. به تصویر زیر دقت کنید:
در این تصویر اطلاعات کاملی از مکانیزم ذخیره سازی دادهها در پلتفرم اندروید مشاهده میکنید.
ما میتوانیم دادههای خود را در یک بانک از نوع SQLite در نظر بگیریم. پایگاهداده به این دلیل، ما را از تصمیم غیرضروری برای اجرای ساختار بی نظم دادهها بینیاز میکند. بیایید به یک مثال از نحوه ذخیره و بازیابی دادهها با استفاده از یکی از این مکانیزمها نگاه کنیم.
Shared Preferences یا اولویتهای اشتراکی
اولویتهای مشترک عمدتا برای ذخیرهسازی تنظیمات برنامهها مفید هستند و تا زمانی که راهاندازی مجدد توسط دستگاه انجام شود، معتبر خواهد بود. بیایید بگوییم که باید اطلاعات مربوط به یک سرور ایمیل را ذخیره کنیم که برنامه ما برای بازیابی دادهها به آن نیاز دارد.
ما باید نام میزبان ایمیل (hostname) , درگاه (port) و کارگزاری که از SSL استفاده میکند را ذخیره کنیم. کلاس زیر این کار را برای ما انجام میدهد به قطعه کد زیر توجه نمایید:
package net.zenconsult.android; import java.util.Hashtable; import android.content.Context; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.preference.PreferenceManager; public class StoreData { public static boolean storeData(Hashtable data, Context ctx) { SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(ctx); String hostname = (String) data.get("hostname"); int port = (Integer) data.get("port"); boolean useSSL = (Boolean) data.get("ssl"); Editor ed = prefs.edit(); ed.putString("hostname", hostname); ed.putInt("port", port); ed.putBoolean("ssl", useSSL); return ed.commit(); } }
package net.zenconsult.android; import java.util.Hashtable; import android.content.Context; import android.content.SharedPreferences; import android.preference.PreferenceManager; public class RetrieveData { public static Hashtable get(Context ctx) { String hostname = "hostname"; String port = "port"; String ssl = "ssl"; Hashtable data = new Hashtable(); SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(ctx); data.put(hostname, prefs.getString(hostname, null)); data.put(port, prefs.getInt(port, 0)); data.put(ssl, prefs.getBoolean(ssl, true)); return data; } }
package net.zenconsult.android; import java.util.Hashtable; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.util.Log; import android.widget.EditText; public class StorageExample1Activity extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Context cntxt = getApplicationContext(); Hashtable data = new Hashtable(); data.put("hostname", "smtp.gmail.com"); data.put("port", 587); data.put("ssl", true); if (StoreData.storeData(data, cntxt)) Log.i("SE", "Successfully wrote data"); else Log.e("SE", "Failed to write data to Shared Prefs"); EditText ed = (EditText) findViewById(R.id.editText1); ed.setText(RetrieveData.get(cntxt).toString()); } }