در قسمت سی و نهم و بخش بعدی آموزش اندروید دررابطه انواع بانک اطلاعاتی و ذخیره اطلاعات در برنامه و نحوه کاربرد هرنوع آنها که جزو مهم ترین مباحث برنامه نویسی اندروید به حساب می آید آموزش داده ایم
در اندروید مانند انواع زبان های دیگر نیاز به ذخیره و بازیابی اطلاعات و تنظیمات و… است.برای این کار نیز از روش های زیر استفاده میکنیم
با استفاده از شی SharedPrefeerence میتوان اطلاعات را با استفاده از روش کلید/مقدار ذخیره کرد.یعنی برای اطلاعات مورد نظر یک نام در نظرگرفته و سپس مقدار را به آن اختصاص داد که نتیجه در یک فایل XML در مسیری که در ادامه بررسی خواهیم کرد قرارا خواهد گرفت.
به مثال زیر دقت فرمایید
پروژه جدیدی بنام SharedPreferencePrj ایجاد کرده و درون activity_main.xml ابزار زیر را به صورت گرافیکی یا کدنویسی ایجادمیکنیم
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.sharedpreferenceprj.MainActivity" android:orientation="vertical" > <TextView android:id="@+id/textView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Enter your Name" /> <EditText android:id="@+id/edt1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="16dp" android:ems="10" > <requestFocus /> </EditText> <Button android:id="@+id/btn1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Save" /> <Button android:id="@+id/btn2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Display Preference Value" /> <Button android:id="@+id/btn3" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Modify Preference Value" /> </LinearLayout>
و در فایل جاوا برنامه نیز چنین کدنویسی میکنیم
package com.example.sharedpreferenceprj; import android.app.Activity; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import android.content.Context; import android.content.SharedPreferences; public class MainActivity extends Activity { Button btnsave; Button btnedit; Button btndisp; EditText edt; SharedPreferences shp; public static final String mypreference= "Myprefs"; public static final String name="NameKey"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); btnsave=(Button)findViewById(R.id.btn1); btndisp=(Button)findViewById(R.id.btn2); btnedit=(Button)findViewById(R.id.btn3); edt=(EditText)findViewById(R.id.edt1); shp=getSharedPreferences(mypreference, Context.MODE_PRIVATE); btnsave.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub String n=edt.getText().toString(); SharedPreferences.Editor editor = shp.edit(); editor.putString(name, n); editor.commit(); Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT).show(); edt.setText(""); } }); btndisp.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { String x=shp.getString(name, ""); edt.setText(x); } }); btnedit.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { String n=edt.getText().toString(); SharedPreferences.Editor editor=shp.edit(); editor.putString(name, n); editor.commit(); Toast.makeText(MainActivity.this, "Edite is Done",Toast.LENGTH_SHORT).show();; edt.setText(""); } }); } }
برنامه را اجرا کرده و خواهید دید که هر کدام از دکمه ها عملیات مربوط به خود را بخوبی انجام میدهند
پس از تعریف متغیر های لازم که در ادامه به آنها میپردازیم یک شی ازنوع sharedPreference ایجاد کرده که پارامتر اول یک مقدار رشته ای است و میتواند نام پکیج هم باشد و پارامتر دوم متغیر ثابت MODE_PRIVATE است که مشخص کننده خصوصی بودن این ذخیره سازی میباشد.
در ادامه نیز رویداد onCLickListener() را برای کلید Save فراخوانی کرده و درون آن ابتدا مقدار درون EditText را با استفاده از متد ()getText و toString() درون متغیری به نام n قرار داده ایم و یک شی از نوع SharedPreference.Editor ایجاد کرده ایم که از طریق این شی و متد putString() بتوان مقادیری را ذخیره کرد توجه کنید که متد ()putString و متدهای امثالش که در آموزش های قبل گفته شده به صورت مقدار/کلید کار میکنند بدین معنی که بااستفاده از یک کلید میتوان مقداری را با توجه به مقدار ذخیره کرد و در انتها نیز پیغام مناسب نمایش داده میشود
shp=getSharedPreferences(mypreference, Context.MODE_PRIVATE); btnsave.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub String n=edt.getText().toString(); SharedPreferences.Editor editor = shp.edit(); editor.putString(name, n); editor.commit(); Toast.makeText(MainActivity.this, "Done", Toast.LENGTH_SHORT).show(); edt.setText(""); } });
کلید بعد که برای نمایش اطلاعات ذخیره شده است نیز تنها از کلید اطلاعات استفاده کرده و آنهارا نمایش میدهد.
<pre class="lang:default decode:true">btndisp.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { String x=shp.getString(name, ""); edt.setText(x); } });
و در انتها کلید Modify یا ویرایش که دستوراتی مشابه دستورات کلید Save دارد و برای ثبت دوباره اطلاعات پس از اعمال تغییرات است.
برای مشاهده فایل حاوی اطلاعات ذخیره شده نیز تنها کافی است به بخش DDMS رفته و گزینه File Explorer را فعال کرده و به مسیر data/data/com.example.sharedpreferenceprj/shared_prefs و یک فایل xml خواهید دید که اطلاعات در این فایل قرار دارند