سبد (0)

مدیریت SessionManagement در اندروید

آموزش مدیریت SessionManagement در اندروید

زمانی که می خواهید داده ی کاربر را خارج از برنامه ذخیره کنید، SessionManagement به شما کمک می کند، بطوری که اگر کاربر بعدها از برنامه ی شما استفاده کرد، می توانید به راحتی جزئیات مربوط به کاربر را برگردانده و متناسب با آن عمل کنید.

این کار از راه های زیادی انجام می شود، اما ساده ترین و بهترین راه انجام این کار، Shared Preferencesمی باشد.

Shared Preferences

این برنامه به شما اجازه می دهد تا داده را به شکل جفت key/value ذخیره و بازیابی کنید. برای استفاده از shared preferences باید متد getSharedPreferences()  را فرابخوانید که با اشاره به فایلی که  شامل مقادیر Preference است، یک نمونه SharedPreference  را گزارش می دهد.

 

SharedPreferences sharedpreferences = getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);    

شما می توانید با استفاده از گروه SharedPreferences.Editor در SharedPreference چیزی ذخیره کنید. شما متد ویرایش را از نمونه ی SharedPreference فرامی خوانید و آن را در یک آبجکت ویرایشگر دریافت خواهید کرد. ترکیب آن مانند زیر می باشد.

 

Editor editor = sharedpreferences.edit();
editor.putString("key", "value");
editor.commit();

علاوه بر متد putString متد های دیگری در گروه ویرایشگر وجود دارند که اجرای داده را در داخل shared preferences  برای شما امکام پذیر می کنند. این متد ها در زیر ارائه شده اند.

  • apply()

    این متد یک متد نظری می باشد. این متد تغییرات شما را از ویرایشگر تا آبجکت sharedPreference  که فرا خواندید، پس می گیرد.

  • clear()

    این متد همه ی مقادیر را از ویرایشگر حذف می کند.

  • remove(String key)

    این متد مقداری را که کلید آن به عنوان یک پارامترمنتقل شده است، حذف می کند.

  • putLong(String key, long value)

    این متد یک مقدار بلند را در یک  ویرایشگر preference  ذخیره خواهد کرد.

  • putInt(String key, int value)

    این متد یک مقدار کامل را در یک ویرایشگر preference  ذخیره خواهد کرد.

  • putFloat(String key, float value)

    این متد یک مقدار معلق را در یک ویرایشگر preference ذخیره خواهد کرد.

مدیریت SessionManagement  از طریق Shared Preferences

برای اینکه مدیریت SessionManagement را از طریق shared preferences انجام دهیم، لازم است که مقادیر یا داده های ذخیره شده در shared preferences در متد  ()onResume را ّررسی کنیم. اگر ما داده نداشته باشیم، برنامه را از ابتدا، مثل زمانی که تازه نصب شده است، آغاز می کنیم. اما اگر داده را به دست آوردیم، از زمانی آن را آغاز می کنیم که کاربر آن را رها کرده است. این مسئله در مثال زیر توضیح داده شده است.

مثال

مثال زیر استفاده از SessionManagement Management را توضیح می دهد. یک برنامه ی پایه ایجاد می کند که به شما اجازه می دهد برای اولین بار وارد سیستم شوید. سپس وقتی بدون log out از برنامه خارج شوید، در هنگام ورود مجدد به برنامه از همان قسمت قبل آغاز به کار خواهید کرد. اما اگر log out را انجام دهید به صفحه ی ورود بازگردانده می شوید.

برای آزمایش این مثال لازم است آن را روی یک دستگاه واقعی یا یک شبیه ساز اجرا کنید.

  • برای ایجاد یک برنامه ی اندروید از Eclipse IDE استفاده خواهید کرد و آن را با عنوان  SessionManagement Management  به عنوان بسته ی com.PRG.SessionManagement management نام گذاری کنید. زمان ایجاد این برنامه مطمئن شوید که Target SDKو Compile With در آخرین ورژن Android SDKهستند تا از سطوح بالاتر API استفاده کنید.

  • فایل src/MainActivity.java را برای افزودن کد SessionManagement تغییر دهید.

  • یک اکتیویتی جدید ایجاد کنید و آن را با عنوان second.java نام گذاری کنید. این فایل را ویرایش کنید تا کد پیشروی را به کد SessionManagement اضافه کنید.

  • فایل res/layout/activity_main.xml را تغییر دهید تا کد XML مربوطه را به آن اضافه کنید.

  • فایلres/layout/second_main.xml را تغییر دهید تا کد XML مربوطه را اضافه کنید.

  • برنامه را اجرا کنید و یک دستگاه اجرایی اندروید انتخاب کرده و برنامه را روی آن نصب کنید و نتایج را بررسی کنید.

در اینجا محتوای MainActivity.java را مشاهده می کنید.

 

package com.PRG.SessionManagement ;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
   EditText ed1,ed2,ed3;
   Button b1;
   Intent in;
   
   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();
            
            in = new Intent(MainActivity.this,second.class);
            startActivity(in);
         }
      });
   }
   
   @Override
   public boolean onCreateOptionsMenu(Menu menu) {
      // Inflate the menu; this adds items to the action bar if it is present.
      getMenuInflater().inflate(R.menu.menu_main, menu);
      return true;
   }
   
   @Override
   public boolean onOptionsItemSelected(MenuItem item) {
      // Handle action bar item clicks here. The action bar will
      // automatically handle clicks on the Home/Up button, so long
      // as you specify a parent activity in AndroidManifest.xml.
      
      int id = item.getItemId();
      
      //noinspection SimplifiableIfStatement
      if (id == R.id.action_settings) {
         return true;
      }
      return super.onOptionsItemSelected(item);
   }
}

در اینجا محتوای second_main.java را مشاهده می کنید.

 

package com.PRG.SessionManagement ;

import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

import static com.PRG.SessionManagement .R.id.button3;

/**
 * Created by Sairamkrishna on 4/7/2015.
 */
public class second extends Activity {
   Button bu=null;
   Button bu2=null;
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.second_main);
      
      bu=(Button)findViewById(R.id.button2);
      bu2=(Button)findViewById(R.id.button3);
   }
   
   public  void logout(View view){
      SharedPreferences sharedpreferences = getSharedPreferences(MainActivity.MyPREFERENCES, Context.MODE_PRIVATE);
      SharedPreferences.Editor editor = sharedpreferences.edit();
      editor.clear();
      editor.commit();
   }
   
   public void close(View view){
      finish();
   }
}

در اینجا محتوای activity_main.xml می باشد.

 

<RelativeLayout 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" android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">
   
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Shared Preference"
      android:id="@+id/textView"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="35dp" />
      
   <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Tutorials Point"
      android:id="@+id/textView2"
      android:layout_below="@+id/textView"
      android:layout_centerHorizontal="true"
      android:textSize="35dp"
      android:textColor="#ff16ff01" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText"
      android:layout_below="@+id/textView2"
      android:layout_marginTop="67dp"
      android:hint="Name"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText2"
      android:layout_below="@+id/editText"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:hint="Pass" />
      
   <EditText
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/editText3"
      android:layout_below="@+id/editText2"
      android:layout_alignParentLeft="true"
      android:layout_alignParentStart="true"
      android:layout_alignParentRight="true"
      android:layout_alignParentEnd="true"
      android:hint="Email" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="login"
      android:id="@+id/button"
      android:layout_below="@+id/editText3"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="50dp" />

</RelativeLayout>

در اینجا محتوای activity_welcome.xml  می باشد.

 

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical" android:layout_width="match_parent"
   android:layout_height="match_parent">
   
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Logout"
      android:onClick="logout"
      android:id="@+id/button2"
      android:layout_gravity="center_horizontal"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="191dp" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Close"
      android:onClick="close"
      android:id="@+id/button3"
      android:layout_below="@+id/button2"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="69dp" />

</RelativeLayout>

در اینجا محتوای Strings.xmlرا مشاهده می کنید.

 

<resources>
   <string name="app_name">My Application</string>
   <string name="hello_world">Hello world!</string>
   <string name="action_settings">Settings</string>
</resources>

در اینجا محتوای AndroidManifest.xml می باشد.

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
   package="com.PRG.SessionManagement " >
   
   <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>
      
      <activity android:name=".second"></activity>
      
   </application>
</manifest>

اجازه بدهید برنامه ی SessionManagement را اجرا کنیم. فرض می کنیم که دستگاه موبایل اندروید خود را به کامپیوتر متصل کرده اید. برای اجرای برنامه از Eclipse، یکی ازفایل های فعالیت پروژه را باز کرده و روی آیکن Run از تولبار کلیک کنید. قبل از شروع برنامه ی شما، Eclipse پنجره ی زیر را برای انتخاب گزینه ی محل اجرای برنامه ی اندرویدتان، نمایش خواهد داد.

نام کاربری و پسورد خود را تایپ کرده و روی دکمه ی login کلیک کنید. مانند تصویر زیر.

به محض اینکه روی دکمه ی login کلیک کنید، این صفحه ی خوش آمدگویی برای شما باز خواهد شد. اکنون اطلاعات ورود شما در shared preferences ذخیره شده است.

اکنون روی دکمه ی Exit witout logout کلیک کنید، پس از آن به صفحه ی ابتدایی بازخواهید گشت. این مسئله در صفحه ی زیر نمایش داده شده است.

اگر شما فایل myPref.xml را به عنوان یک فایل notpad باز کنید محتویات را به صورت زیر مشاهده میکنید.

اگردکمه ی logout را انتخاب کنید، مقادیر Preference پاک می شوند . و اگر شما مقادیر متفاوتی را به عنوان ورودی وارد کنید آنها به عنوان preference به فایل xml اضافه می شوند.

تمامی محصولات و خدمات این وبسایت، حسب مورد دارای مجوزهای لازم از مراجع مربوطه می‌باشند و فعالیت‌های این سایت تابع قوانین و مقررات جمهوری اسلامی ایران است.
logo-samandehi مجوز نشر دیجیتال از وزرات فرهنگ و ارشاد اسلامی پرداخت آنلاین -  بانک ملت معرفی بیاموز در شبکه سه