مقدمه

آموزش session ( ویکی پدیا ) در اندروید زمانی به کار شما می‌آید که تصمیم داشته باشید داده‌های کاربر را خارج از اپلیکیشن خود ذخیره‌سازی کنید. به این طریق، دفعه بعد که کاربر بخواهد از اپلیکیشن شما استفاده کند، به راحتی می‌توانید جزئیات اطلاعات او را بازگردانده و مطابق آنها برنامه را اجرا نمایید.
برقراری جلسه در اندروید، به طرق مختلف قابل انجام است، اما یکی از ساده‌ترین و دلچسب‌ترین آنها، شیوه Shared Preferences می‌باشد.

Shared Preferences

اولین نکته در آموزش session در اندروید، آن است که Shared Preferences به شما اجازه می‌دهد که داده‌ها را به شکل یک جفت کلید،مقدار بازیابی کنید. برای استفاده از shared preferences در Android، شما می‌بایست متدی به نام getSharedPreferences() را صدا بزنید که نمونه‌ای از SharedPreference را برمی‌گرداند که به فایلی که حاوی مقادیر preferences است، اشاره می‌کند.

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

شما می‌توانید با استفاده از SharedPreferences، چیزی را در SharedPreferences.Editor class ذخیره کنید. شما متد ویرایش از نمونه SharedPreference را صدا می‌زنید و آن را در شیء ویرایشگر خود دریافت خواهید کرد. نحو این متد به شکل زیر خواهد بود:

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

جدا از متد putString، متدهای دیگری وجود دارند که در کلاس ویرایشگر موجود هستند و اجازه دستکاری داده درون shared preferences را می‌دهند. در ادامه، لیستی از این متدها در اندروید را مشاهده خواهید کرد:

Sr.No Mode & description
1 ()apply

این مورد، یک متد انتزاعی است و وظیفه اعمال تغییرات را از ویرایشگر به شیء sharedPreferenceی که شما فراخوانده‌اید، بر عهده دارد.

2 ()clear

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

3 remove(String key)

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

4 putLong(String key, long value)

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

5 putInt(String key, int value)

این متد، یک مقدار عدد صحیح (integer) را در ویرایشگر preference ذخیره می‌کند.

6 putFloat(String key, float value)

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

آموزش session در اندروید از طریق Shared Preferences

برای انجام مدیریت جلسه از طریق Shared Preferences، شما نیاز خواهید داشت که مقادیر یا داده‌های ذخیره شده در shared preferences در متد onResume را بررسی کنید. اگر این داده را ندارید، شما اپلیکیشن را از ابتدا و مثل زمانی که تازه آن را نصب کرده بودید، اجرا خواهید کرد. اما اگر به این داده دسترسی پیدا کردید، قادر خواهید بود که برنامه را دقیقا از همان جایی که کاربر آن را ترک کرده بوده، اجرا نمایید. این موضوع در مثال زیر نشان داده شده است:
مثال زیر، استفاده از یک آموزش session در اندروید را نمایش می‌دهد. این مثال، شامل یک برنامه کاربردی پایه است که به شما اجازه می‌دهد تا برای نخستین بار login کنید و اگر بدون logout از اپلیکیشن خارج شوید، در صورت شروع مجدد برنامه، به همان محل قبل بازگردانده خواهید شد. برای امتحان کردن این مثال، شما باید آن را در یک دستگاه واقعی یا یک شبیه‌ساز اجرا نمایید.

گام شرح
1 برای ایجاد یک برنامه کاربردی android تحت بسته com.example.sairamkrishna.myapplication، از android studio IDE استفاده خواهید کرد.
2 فایل src/MainActivity.java را برای اضافه کردن کد پیشرفت به منظور افزودن کد جلسه، اصلاح کنید.
3 یک Activity جدید ایجاد کرده و این فعالیت به نام second.java خواهد بود. این فایل را برای اضافه کردن کد پیشرفت و به منظور اضافه کردن کد جلسه، ویرایش کنید.
4 فایل res/layout/activity_main.xml را برای اضافه کردن کد XML مربوطه اصلاح کنید.
5 فایل res/layout/second_main.xml را برای افزودن کد XML مربوطه اصلاح کنید.
7 اپلیکیشن را اجرا کرده و یک دستگاه اندروید روشن را انتخاب کرده، اپلیکیشن را روی آن نصب کرده و نتایج را اصلاح نمایید.

در این قسمت، محتوای MainActivity.java را مشاهده می‌کنید.

package com.example.sairamkrishna.myapplication;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {
   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_main.class);
            startActivity(in);
         }
      });
   }
}

این بخش شامل محتوای second_main.java می‌باشد.

package com.example.sairamkrishna.myapplication;

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

public class second_main 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 را مشاهده خواهید کرد.

<?xml version="1.0" encoding="utf-8"?>
<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>

این قسمت، شامل محتوای second_main.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>
</resources>

در این قسمت محتوای AndroidManifest.xml را مشاهده خواهید کرد.

<?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>
      
      <activity android:name=".second"></activity>
      
   </application>
</manifest>

اکنون زمان اجرای اپلیکیشن شماست. فرض ما این است که شما در ضمن انجام تنظیمات محیطی، AVD خود را ایجاد کرده‌اید. برای اجرای برنامه کاربردی از Android studio، یکی از فایل‌های activity پروژه خود را باز کرده بر روی آیکن Run  از نوار ابزار کلیک کنید. Android studio اپلیکیشن را بر روی AVD شما نصب کرده، آن را آغاز نموده و اگر همه چیز در برنامه و set-up شما به خوبی پیش رفت، پنجره شبیه‌ساز زیر را نمایش خواهد داد:

آموزش session در اندروید
نام کاربری و رمز عبور خود را تایپ کنید (هر چیزی را می‌توانید به عنوان نام کاربری و پسورد تایپ کنید، اما عبارت خود را به خاطر بسپرید) و بر روی کلید login کلیک کنید. این موضوع در شکل زیر نشان داده شده است:

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

آموزش session در اندروید

اکنون، بدون logout  کردن، بر روی دکمه Exit کلیک کنید. اگر تمامی مراحل گفته شده در این آموزش session در اندروید را به درستی انجام داده باشید، شما به صفحه home بازگردانده شده و در فایل preference، خروجی به شکل زیر نمایش داده خواهد شد.

اگر فایل myPref.xml را به صورت یک فایل note باز کنید، به شکل زیر نمایش داده خواهد شد:

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

نتیجه ‌گیری

همان‌طور که در ابتدای این مطلب نیز اشاره کردیم، برای آموزش session در اندروید، استفاده از روش Shared Preferences ساده‌ترین راه است. با برداشتن گام‌هایی که به صورت مرحله به مرحله آورده شده‌اند، قادر خواهید بود که جلسه‌ مورد نظر در Android را به شکلی برقرار کنید که در صورت ترک برنامه توسط کاربر و سپس وارد شدن مجدد او، کاربر دقیقا به همان نقطه‌ای بازگردد که برنامه را رها کرده است.

آموزش برنامه نویسی اندروید در قالب پروژه ساخت اپلیکیشن خبری