نمایش نتایج 1 تا 4 از 4

نام تاپیک: آموزش کامل و جامع استفاده از کتابخانه Volley

  1. #1

    آموزش کامل و جامع استفاده از کتابخانه Volley

    سلام دوستان

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


    شروع مبحث :

    کتابخانه volley در حقیقت یک کتابخانه شبکه(معمولا برای استفاده از اینترنت) در آندروید است که فراخوانی شبکه را بسیار ساده تر، سریع تر و بدون نیاز به نوشتن حجم زیادی از کدها کرده است. به طور پیش فرض کتابخانه volley به صورت غیرهمزمان(asynchronously) کار میکند، پس نیاز نیست که برای استفاده از asynctask نگران باشید.

    volley ویژگی های منحصر به فردی دارد که بعضی ار آنها عبارتند از:

    1.صف درخواست و الویت بندی
    2.استفاده موثر از cache و مدیریت حافظه
    3.توسعه و سفارشی سازی کتابخانه با توجه به نیاز ما
    4.لغو درخواست

    مراحل استفاده :
    1.ساخت یک پروژه جدید
    1.در Android Studio یک پروژه جدید، ایجاد میکنیم.
    2.برای سازماندهی بهتر برنامه، دو بسته (packages) بسازید و نام آن ها را app و utils قراردهید.
    3.قسمت build.gradle را باز کنید و کتابخانه volley را به آن بیافزایید.
    compile ‘com.mcxiaoke.volley:library-aar:*.*.*0’

    dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:22.2.0'
    compile 'com.android.volley:volley:1.0.0'
    }


    1.1ایجاد کلاس Volley Singleton
    4.در پکیج utils، یک کلاس به نام LruBitmapCache.java بسازید و کدهای زیر را درون آن قرار دهید. این کلاس برای مدیریت cache مربوط به عکس استفاده میشود.



    package ir.peymanf11.volleyexamples.volley.utils;

    import com.android.volley.toolbox.ImageLoader.ImageCache;
    import android.graphics.Bitmap;
    import android.support.v4.util.LruCache;

    public class LruBitmapCache extends LruCache<String, Bitmap> implements
    ImageCache {
    public static int getDefaultLruCacheSize() {
    final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    final int cacheSize = maxMemory / 8;

    return cacheSize;
    }

    public LruBitmapCache() {
    this(getDefaultLruCacheSize());
    }

    public LruBitmapCache(int sizeInKiloBytes) {
    super(sizeInKiloBytes);
    }

    @Override
    protected int sizeOf(String key, Bitmap value) {
    return value.getRowBytes() * value.getHeight() / 1024;
    }

    @Override
    public Bitmap getBitmap(String url) {
    return get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {
    put(url, bitmap);
    }
    }





    5.درون پکیج app، یک کلاس به نام AppController.java که از Application ارث بری(extend) میکند بسازید و کدهای زیر را درون آن قرار دهید.



    package ir.peymanf11.volleyexamples.app;

    import info.androidhive.volleyexamples.volley.utils.LruBi tmapCache;
    import android.app.Application;
    import android.text.TextUtils;
    import com.android.volley.Request;
    import com.android.volley.RequestQueue;
    import com.android.volley.toolbox.ImageLoader;
    import com.android.volley.toolbox.Volley;

    public class AppController extends Application {

    public static final String TAG = AppController.class
    .getSimpleName();

    private RequestQueue mRequestQueue;
    private ImageLoader mImageLoader;
    private static AppController mInstance;

    @Override
    public void onCreate() {
    super.onCreate();
    mInstance = this;
    }

    public static synchronized AppController getInstance() {
    return mInstance;
    }

    public RequestQueue getRequestQueue() {
    if (mRequestQueue == null) {
    mRequestQueue = Volley.newRequestQueue(getApplicationContext());
    }

    return mRequestQueue;
    }

    public ImageLoader getImageLoader() {
    getRequestQueue();
    if (mImageLoader == null) {
    mImageLoader = new ImageLoader(this.mRequestQueue,
    new LruBitmapCache());
    }
    return this.mImageLoader;
    }

    public <T> void addToRequestQueue(Request<T> req, String tag) {
    // set the default tag if tag is empty
    req.setTag(TextUtils.isEmpty(tag) ? TAG : tag);
    getRequestQueue().add(req);
    }

    public <T> void addToRequestQueue(Request<T> req) {
    req.setTag(TAG);
    getRequestQueue().add(req);
    }

    public void cancelPendingRequests(Object tag) {
    if (mRequestQueue != null) {
    mRequestQueue.cancelAll(tag);
    }
    }
    }





    6. اکنون AndroidManifest.xml را باز کنید و مجوز استفاده از INTERNET را درون آن قرار دهید.



    <?xml version="1.0" encoding="utf-8"?>

    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ir.peymanf11.volleyexamples"

    android:versionCode="1"
    android:versionName="1.0" >


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

    <application
    android:name="ir.peymanf11.volleyexamples.app.AppC ontroller"

    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <!-- all activities and other stuff -->
    </application>

    </manifest>




    در حال حاضر راه اندازی های اولیه برای volley انجام شده است. اکنون بیایید فعالیت های لازم برای درخواست http را انجام دهیم.


    2.ساخت درخواست JSON
    volley به صورت ساده درخواست json را فراهم میکند. اگر شما نیاز به پاسخ در شی json دارید باید از کلاس JsonObjectRequest استفاده کنید و در صورت json پاسخی دارد باید از کلاس JsonArrayRequest استفاده کنید.

    2.1.ساخت json object request
    کد زیر یک درخواست json را که با “{” نشانه گذاری شده است را شروع میکند.



    // Tag used to cancel the request
    String tag_json_obj = "json_obj_req";
    String url = "http://api.androidhive.info/volley/person_object.json";
    ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...");
    pDialog.show();

    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.GET,
    url, null,
    new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(JSONObject response) {
    Log.d(TAG, response.toString());
    pDialog.hide();
    }
    }, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
    VolleyLog.d(TAG, "Error: " + error.getMessage());
    // hide the progress dialog
    pDialog.hide();
    }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(json ObjReq, tag_json_obj);






    2.2. ساخت json array request
    کد زیر یک درخواست json را که در آن پاسخ با “[” نشانه گذاری شده است را شروع میکند.



    // Tag used to cancel the request
    String tag_json_arry = "json_array_req";
    String url = "http://api.androidhive.info/volley/person_array.json";
    ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...");
    pDialog.show();
    JsonArrayRequest req = new JsonArrayRequest(url,
    new Response.Listener<JSONArray>() {
    @Override
    public void onResponse(JSONArray response) {
    Log.d(TAG, response.toString());
    pDialog.hide();
    }
    }, new Response.ErrorListener() {
    @Override
    public void onErrorResponse(VolleyError error) {
    VolleyLog.d(TAG, "Error: " + error.getMessage());
    pDialog.hide();
    }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(req, tag_json_arry);






    3. ساخت درخواست String
    کلاس StringRequest برای دریافت هرنوع اطلاعات که از نوع string است را میتوان استفاده کرد. این درخواست میتواند json, xml, html یا… باشد.



    // Tag used to cancel the request
    String tag_string_req = "string_req";
    String url = "http://api.androidhive.info/volley/string_response.html";
    ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...");
    pDialog.show();
    StringRequest strReq = new StringRequest(Method.GET,
    url, new Response.Listener<String>() {

    @Override
    public void onResponse(String response) {
    Log.d(TAG, response.toString());
    pDialog.hide();

    }
    }, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
    VolleyLog.d(TAG, "Error: " + error.getMessage());
    pDialog.hide();
    }
    });

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(strR eq, tag_string_req);






    4.اضافه کردن post parameters
    واضح است که ما گاهی اوقات نیاز به ارائه درخواست داریم. برای انجام این کار ما نیاز به استفاده از ()getParams برای یک ارزش کلیدی داریم.
    به عنوان مثال در مثال زیر من یک نام، ایمیل و رمز عبور ارسال میکنم.



    // Tag used to cancel the request
    String tag_json_obj = "json_obj_req";
    String url = "http://api.androidhive.info/volley/person_object.json";
    ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...");
    pDialog.show();
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
    url, null,
    new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(JSONObject response) {
    Log.d(TAG, response.toString());
    pDialog.hide();
    }
    }, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
    VolleyLog.d(TAG, "Error: " + error.getMessage());
    pDialog.hide();
    }
    }) {

    @Override
    protected Map<String, String> getParams() {
    Map<String, String> params = new HashMap<String, String>();
    params.put("name", "Androidhive");
    params.put("email", "abc@androidhive.info");
    params.put("password", "password123");

    return params;
    }

    };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(json ObjReq, tag_json_obj);






    5.اضافه کردن request headers
    درست مانند اضافه کردن پارامتر درخواست، برای ارسال هدر درخواست (headers) ما باید از ()getHeaders بهره ببریم. در این مثال ارسال مطالب، نوع و apiKey درخواست شده است.




    // Tag used to cancel the request
    String tag_json_obj = "json_obj_req";
    String url = "http://api.androidhive.info/volley/person_object.json";
    ProgressDialog pDialog = new ProgressDialog(this);
    pDialog.setMessage("Loading...");
    pDialog.show();
    JsonObjectRequest jsonObjReq = new JsonObjectRequest(Method.POST,
    url, null,
    new Response.Listener<JSONObject>() {

    @Override
    public void onResponse(JSONObject response) {
    Log.d(TAG, response.toString());
    pDialog.hide();
    }
    }, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
    VolleyLog.d(TAG, "Error: " + error.getMessage());
    pDialog.hide();
    }
    }) {

    /**
    * Passing some request headers
    * */
    @Override
    public Map<String, String> getHeaders() throws AuthFailureError {
    HashMap<String, String> headers = new HashMap<String, String>();
    headers.put("Content-Type", "application/json");
    headers.put("apiKey", "xxxxxxxxxxxxxxx");
    return headers;
    }

    };

    // Adding request to request queue
    AppController.getInstance().addToRequestQueue(json ObjReq, tag_json_obj);






    6.ساخت Image request
    volley یک عنصر سفارشی سازی شده نمایش تصویر به نام NetworkImageView برای نمایش یک عکس از URL را معرفی کرده است.

    6.1 بارگذاری تصویر در NetworkImageView


    ImageLoader imageLoader = AppController.getInstance().getImageLoader();

    // If you are using NetworkImageView
    imgNetWorkView.setImageUrl(Const.URL_IMAGE, imageLoader);




    6.2 اگر شما میخواهید تصویر را در ImageView به جای NetworkImageView استفاده کنید، میتوانید به صورت زیر عمل کنید. در کد زیر ما بازخورد موفقیت (success) و خطا (error ) را داریم و باتوجه به نیاز از آنها بهره میبریم. در زیر درون متد ()onResponse از ()response.getBitmap برای بارگذاری تصویر در ImageView استفاده میکنیم.



    ImageLoader imageLoader = AppController.getInstance().getImageLoader();
    // If you are using normal ImageView
    imageLoader.get(Const.URL_IMAGE, new ImageListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
    Log.e(TAG, "Image Load Error: " + error.getMessage());
    }

    @Override
    public void onResponse(ImageContainer response, boolean arg1) {
    if (response.getBitmap() != null) {
    // load image into imageview
    imageView.setImageBitmap(response.getBitmap());
    }
    }
    });







    6.3 تعریف placeholder image and error image
    در اینجا یک دیگر از راه های نمایش تصویر در ImageView استفاده از placeholder image and error image است. placeholder image and error image زمانی نمایش دادده خواهد شد که تصویر دانلود شود. اگر تصویر دانلود نشود، بخش خطا نمایش داده خواهد شد.



    // Loading image with placeholder and error image
    imageLoader.get(Const.URL_IMAGE, ImageLoader.getImageListener(
    imageView, R.drawable.ico_loading, R.drawable.ico_error));









    7.مدیریت کش(cache) در volley
    Volley از مکانیزم قوی و قدرتمند برای حفظ کش(cache) استفاده میکند. این فعالیت موجب صرفه جویی زیادی در مصرف پنهای باند و مدت زمان انتظار کاربران میشود. در زیر چند روش استفاده از کش(cache) ذکر شده است:

    7.1 بارگذاری تصویر از کش(cache)
    مانند زیر شما میتونید کش(cache) را قبل از برقراری تماس با URL بررسی کنید.



    Cache cache = AppController.getInstance().getRequestQueue().getC ache();
    Entry entry = cache.get(url);
    if(entry != null){
    try {
    String data = new String(entry.data, "UTF-8");
    // handle data, like converting it to xml, json, bitmap etc.,
    } catch (UnsupportedEncodingException e) {
    e.printStackTrace();
    }
    }
    }else{
    // Cached response doesn't exists. Make network call here
    }






    7.2 باطل کردن کش (cache)
    باطل کردن کش(Cache) به معنی بی اعتبار کردن آن است و نه به معنی حذف کامل آن. Volley همچنان از کش(Cache) استفاده میکند تا زمانی که داده(data) جدیدی را از شبکه دریافت میکند و سپس داده(data)های جدیدی را دریافت میکند و از آنها استفاده میکند.



    AppController.getInstance().getRequestQueue().getC ache().invalidate(url, true);






    7.3 خاموش کردن کش(cache)
    اگر شما میخاید استفاده از کش (cache) را غیرفعال کنید میتوانید از ()setShouldCache برای انجام این کار استفاده کنید.



    // String request
    StringRequest stringReq = new StringRequest(....);
    // disable cache
    stringReq.setShouldCache(false);






    7.4 حذف کش(Cache) مربوط به یک دامنه خاص



    AppController.getInstance().getRequestQueue().getC ache().remove(url);




    7.5 حذف تمامی کش(Cache)ها
    شما میتونید به صورت زیر تمامی کش(Cache)ها را به صورت زیر حذف کنید.



    AppController.getInstance().getRequestQueue().getC ache().clear(url);








    8.لغو درخواست
    شاید شما هم تا الان متوجه شده اید که صف درخواست دو مقدار میپذیرد. یکی از اینها شی است و دیگری تگ درخواست است((RequestQueue(request, tag). این تگ برای شناسایی درخواست در زمان لغو آن است. اگر تگ تعداد زیادی درخواست دارد تمام آن درخواست ها لغو میشود. متد ()cancellAll برای لغو هر درخواستی استفاده میشود.
    8.1 لغو یک درخواست
    در کد زیر ما درخواستی با تگ “feed_request” را لغو میکنیم.



    String tag_json_arry = "json_req";
    ApplicationController.getInstance().getRequestQueu e().cancelAll("feed_request");






    8.2 لغو تمامی درخواست ها
    در کد زیر ما تمامی درخواست ها را لغو کرده ایم.



    ApplicationController.getInstance().getRequestQueu e().cancelAll();






    9.الویت بندی درخواست
    اگر شما درحال چندین درخواست به صورت همزمان هستید میتوانید آنها را براساس نیازتان الویت بندی کنید، الویت ها به صورت عادی، پایین، فوری و بالا است.



    private Priority priority = Priority.HIGH;
    StringRequest strReq = new StringRequest(Method.GET,
    Const.URL_STRING_REQ, new Response.Listener<String>() {

    @Override
    public void onResponse(String response) {
    Log.d(TAG, response.toString());
    msgResponse.setText(response.toString());
    hideProgressDialog();

    }
    }, new Response.ErrorListener() {

    @Override
    public void onErrorResponse(VolleyError error) {
    VolleyLog.d(TAG, "Error: " + error.getMessage());
    hideProgressDialog();
    }
    }) {

    @Override
    public Priority getPriority() {
    return priority;
    }

    };







    .

  2. #2
    کاربر دائمی آواتار godofphp
    تاریخ عضویت
    مرداد 1392
    محل زندگی
    between 0 and 1
    پست
    792

    نقل قول: آموزش کامل و جامع استفاده از کتابخانه Volley

    شما بهتر نیست به جای کپی پیست کردن تلفظ صحیح کلمه ی Android رو ابتدا یاد بگیرید .
    اینطور که شما میگید
    آندروید
    از یه استفاده کننده بعیده چه برسه کسی که ادعا میکنه برنامه نویسه حداقل یکبار بزنید توی گوگل ترنسلت براتون تلفظ بکنه

  3. #3

    نقل قول: آموزش کامل و جامع استفاده از کتابخانه Volley

    نقل قول نوشته شده توسط godofphp مشاهده تاپیک
    شما بهتر نیست به جای کپی پیست کردن تلفظ صحیح کلمه ی Android رو ابتدا یاد بگیرید .
    اینطور که شما میگید از یه استفاده کننده بعیده چه برسه کسی که ادعا میکنه برنامه نویسه حداقل یکبار بزنید توی گوگل ترنسلت براتون تلفظ بکنه



    آیا مشکل همین تلفظ کلمه هستش ؟ راستی لینک سایت آموزش پولی رو قرار نداد اینجا فک کنم یادتون رفته!!

    ایزن بنظرتون امکان اشتباه تایپی نیس ؟؟ آموزش دادن اشکالی داره یا ایراد گرفتن از آموزش بخاطر تایپ یک کلمه !

  4. #4

    نقل قول: آموزش کامل و جامع استفاده از کتابخانه Volley

    نقل قول نوشته شده توسط godofphp مشاهده تاپیک
    شما بهتر نیست به جای کپی پیست کردن تلفظ صحیح کلمه ی Android رو ابتدا یاد بگیرید .
    اینطور که شما میگید از یه استفاده کننده بعیده چه برسه کسی که ادعا میکنه برنامه نویسه حداقل یکبار بزنید توی گوگل ترنسلت براتون تلفظ بکنه
    شما خجالت نمیکشی به کسی که زحمت کشیده یه پست آموزشی مفید گذاشته به جای تشکر ، از یه غلط املایی ایراد میگیری . یه مقدار شعور هم خوب چیزیه . حتی اگر کپی پیست هم کرده باشه کارش مفید بوده شما یه مقدار رو انسانیتت کار کن . بگرد از پست من هم یه غلط املایی پیدا کن بیکار

تاپیک های مشابه

  1. طریقه استفاده از کتابخانه Volley
    نوشته شده توسط slr560 در بخش Android Studio
    پاسخ: 2
    آخرین پست: یک شنبه 03 اردیبهشت 1396, 08:25 صبح
  2. آموزش: اموزش استفاده از کتابخانه جاوا اسکریپت Modernizr
    نوشته شده توسط amirtc در بخش طراحی وب (Web Design)
    پاسخ: 5
    آخرین پست: سه شنبه 12 آبان 1394, 13:18 عصر
  3. اطلاعات کامل در مورد استفاده از TinyMce و کتابخانه AntiXss
    نوشته شده توسط behrad2012 در بخش ASP.NET Web Forms
    پاسخ: 0
    آخرین پست: یک شنبه 29 دی 1392, 12:43 عصر
  4. آموزش: آموزش فشرده سازی با استفاده از کتابخانه NET Zip Library
    نوشته شده توسط ایمان مدائنی در بخش C#‎‎
    پاسخ: 2
    آخرین پست: سه شنبه 07 خرداد 1392, 00:44 صبح
  5. استفاده از کتابخانه
    نوشته شده توسط abbas.net در بخش Foxpro
    پاسخ: 1
    آخرین پست: شنبه 16 تیر 1386, 15:39 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •