مقالات اندروید

معرفی کتابخانه والی (Volley)

معرفی کتابخانه والی (Volley)

در مقاله معرفی کتابخانه والی (Volley) شما رو با یکی از کتابخانه های برنامه نویسی اندروید به نام کتابخانه Volley آشنا میکنیم .

کتابخانه VOLLEY در حقیقت کتابخانه ای است که در سال ۲۰۱۳ معرفی شد .

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

کاربرد و معرفی کتابخانه والی (Volley) :

کتابخانه Volley کتابخانه ای است که کار با سرورها رو در اندروید ساده کرده و مهم تر از همه دارای سرعت بالایی هست .

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

کد های کم تر، به معنی باگ کم تر است که هدف اصلی برنامه نویسان است. منظور ، کد های سمت سرور هست که جایگزین کد های منطق و Async Task است که شما آن ها را برای دریافت پاسخ از API های سمت سرور و نمایش آن ها به شکل مناسب استفاده می کنید .

در Async Task باید Progress window و Progress bar رو در قسمت PreExecute و onPostExecute قرار بدیم .

درسته که این کار سختی نیست اما کسل کننده و زمانبر هست. پس می‌تونیم از سرویس volley به جای Async استفاده کنیم .

مزیت های استفاده ازکتابخانه والی (Volley)

Volley به شکل اتوماتیک تمامی درخواست های سمت سرور را زمان بندی می کند .

volley تمامی در خواست هایی که برنامه ی شما آن ها را اجرا می کند را انجام می دهد و تصویر و پاسخ مورد نظر را از اینترنت برای شما می گیرد .

volley دیسک و حافظه ی شفاف برای ذخیره ی سازی داده ها و کار با دیتابیس رو در اختیار شما قرار می دهد.

Volley امکان کنسل کردن درخواست API را در اختیار شما می گذارد. یعنی که می توانید درخواست تکی و یا مجموعه ای از دستور ها را هم زمان کنسل کنید .

volley توانایی سفارشی کردن بسیار قوی در اختیار شما می گذارد .

volley ابزار هایی برای رفع اشکال و پیگیری دارد .

دو کلاس اصلی در Volley وجود دارد :

Request-queue

Request

Request-queue : این دقیقا هدف درخواستی شما در سمت سرور است و می توانید این صف درخواست را موقع نیاز ایجاد کنید اما بهتر است در زمان شروع این کار را انجام دهید و از آن به عنوان singleton استفاده کنید.

Request : شامل تمامی جزئیاتی است که برای فراخوان API در شبکه مورد استفاده قرار می گیرند. برای مثال ، از متد GET یا POST در Data request برای انتقال Voice response وError response به کار می رود.

به شکل زیر دقت کنید .

معرفی کتابخانه والی (Volley)

تمامی درخواست های قبلی در کش حافظه میمونه و زمانی که ما درخواستی رو ارسال میکنیم ، ابتدا حافظه کش رو بررسی میکنه و اگر موجود باشه خیلی سریع به درخواست پاسخ میده .

این کار باعث میشه که سرعت فوق العاده بالا بره چون فاصله زمانی ارسال درخواست تا دریافت پاسخ کم میشه .

اگر بخواید والی رو با Async Task که قبلا برای کدنویسی سمت سرور استفاده میشد مقایسه کنید ، مثل این میمونه که بخواید cpu پنتیوم 4 قدیمی رو با سی پی یو cori7 نسل جدید مقایسه کنید .

کار با والی در اندروید برای معرفی کتابخانه والی (Volley) :

مثال استفاده از کتابخانه والی برای ارسال ایمیل :

قدم اول : نوشتن کدهای سمت سرور با php در هاست واقعی

<?php

	$name=$_POST['Name'];
	$email=$_POST['Email'];
	$message=$_POST['Message'];

	$to="YOUR EMAIL ADDRESS";
	$subject="Message From elecomco.com";
	$body="name: $name \n email: $email \n message: $message ";
	mail($to,$subject,$body);

?>

به جای Your Email Address ایمیل خودتان را بنویسید .

متغیرهای تعریف شده در PHP در برنامه اندروید توسط کتابخانه والی به سمت سرور ارسال شده و مقدار دهی میشوند .

متغیر body بدنه ایمیل ارسالی را مشخص میکند که در اینجا شامل 3 متغیر نام ، ایمیل و پیام فرستنده میباشد .

قدم دوم : باز کردن یک پروژه اندروید و افزودن کتابخانه والی

توضیحات بیشتر و راهنمای استفاده از کتابخانه والی در سایت گیت هاب

شرکتهای مختلفی کتابخانه والی را ارائه کرده اند . پیشنهاد ما یکی از 2 کتابخانه زیر میباشد :

ورژن کتابخانه ها بستگی به زمان استفاده شما دارد .

implementation 'com.mcxiaoke.volley:library:1.0.19'
or 
implementation 'com.android.volley:volley:1.0.0'

قدم سوم : دادن مجوز دسترسی به اینترنت در منیفست پروژه قبل از تگ Application در فایل منیفست

<uses-permission android:name="android.permission.INTERNET"/>

قدم چهارم : طراحی لی اوت

بهتر است رنگ ها و متن ها را در فایل های string و color در پوشه Value ذخیره کنید .

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".ActivityEmail">

        <EditText
            android:id="@+id/ed_message_name"
            android:inputType="text"
            android:hint="@string/hintYourName"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <EditText
            android:id="@+id/ed_message_email"
            android:inputType="text"
            android:hint="@string/hintYourEmail"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <EditText
            android:id="@+id/ed_message_text"
            android:inputType="text"
            android:hint="@string/hintYourMessage"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    <ImageButton
        android:id="@+id/btn_send"
        android:onClick="btnSendClick"
        android:layout_gravity="center"
        android:layout_marginTop="90dp"
        android:tint="@color/colorAccent"
        android:src="@drawable/ic_send"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

قدم پنجم : کدنویسی جاوا

package elecomco.com.sendemail.activity;

import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;

import java.util.HashMap;
import java.util.Map;

import elecomco.com.sendemail.R;

public class ActivityEmail extends AppCompatActivity {

    private EditText edName,edEmail,edMessage;
	//Insert your php file Address In your Host for example -> https://your site address/Your Folder Name/Your File.php
    String url="";
    private String errorSendText="پیام ارسال نشد";
    private String successSendText="پیام شما با موفقیت ارسال شد";

    RequestQueue requestQueue;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_email);

        edName=findViewById(R.id.ed_message_name);
        edEmail=findViewById(R.id.ed_message_email);
        edMessage=findViewById(R.id.ed_message_text);

        requestQueue= Volley.newRequestQueue(this);
    }

    public void btnSendClick(final View view) {
        final String name, email, message;
        name = edName.getText().toString();
        email = edEmail.getText().toString();
        message = edMessage.getText().toString();

        if (edName.getText().toString().isEmpty()) {
            String nameError = "نام خود را وارد کنید";
            Snackbar snackbar = Snackbar.make(view, nameError, Snackbar.LENGTH_LONG);
            View view1 = snackbar.getView();
            view1.setBackgroundColor(getResources().getColor(R.color.pink_500));
            snackbar.show();
            return;
        } else if (edEmail.getText().toString().isEmpty()) {
            String emailError = "ایمیل خود را وارد کنید";
            Snackbar snackbar = Snackbar.make(view, emailError, Snackbar.LENGTH_LONG);
            View view1 = snackbar.getView();
            view1.setBackgroundColor(getResources().getColor(R.color.pink_500));
            snackbar.show();
            return;
        } else if (edMessage.getText().toString().isEmpty()) {
            String messagelError = "پیام خود را وارد کنید";
            Snackbar snackbar = Snackbar.make(view, messagelError, Snackbar.LENGTH_LONG);
            View view1 = snackbar.getView();
            view1.setBackgroundColor(getResources().getColor(R.color.pink_500));
            snackbar.show();
            return;
        }

        StringRequest stringRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
            @Override
            public void onResponse(String response) {
                Snackbar snackbar = Snackbar.make(view, successSendText, Snackbar.LENGTH_LONG);
                View view1 = snackbar.getView();
                view1.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                snackbar.show();
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                Snackbar snackbar = Snackbar.make(view, errorSendText, Snackbar.LENGTH_LONG);
                View view1 = snackbar.getView();
                view1.setBackgroundColor(getResources().getColor(R.color.colorAccent));
                snackbar.show();
            }
        })
        {
            @Override
            protected Map<String, String> getParams() {
                Map<String,String> Data=new HashMap<>();
                Data.put("Name",name);
                Data.put("Email",email);
                Data.put("Message",message);
                return Data;
            }
        };

        requestQueue.add(stringRequest);

    }

}

در متغیر url آدرس فایل php را که در هاست قرار دادیم مشخص میکنیم .

یک آبجکت از کلاس StringRequest ایجاد میکنیم و در متد onResponse آن پیام موفقیت آمیز بودن ارسال ایمیل را مینویسیم . در اینجا من به جای Toast از Snackbar استفاده کرده ام .

متد onResponse زمانی فراخوانی میشود که عملیات موفقیت آمیز باشد .

متد onErrorResponse نیز زمانی فراخوانی میشود که ارتباط با سرور به هر دلیلی برقرار نشود .

آبجکتی که از کلاس RequestQueue میسازیم درخواست ها را در صف قرار میدهد .

توسط تابع getParams مقادیر را به سمت سرور ارسال میکنیم .

این 3 متغیر در واقع جایگزین همان متغیرهای php میشود که در سمت سرور کدنویسی کرده بودیم .

با امید به اینکه معرفی کتابخانه والی (Volley) مورد رضایت شما عزیزان قرار گرفته باشد . در دوره آموزش صفر تا صد برنامه نویسی اندروید چندین پروژه کاربردی با استفاده از کتابخانه والی انجام شده است .

یک پاسخ بنویسید

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 
  مشترک شدن  
اطلاع رسانی کن