volley : آموزش استفاده از آن برای ارسال درخواست به سرور
volley : آموزش استفاده از آن برای ارسال درخواست به سرور

کتابخانه Volley چی هست؟

Volley یک کتابخونه Http هست که توسط شرکت گوگل توسعه ، و در Google IO 2013 به صورت رسمی معرفی شده ؛ تا بتونه در خواست های سمت سرور اپلیکیشن های اندرویدی رو به شکل چشم گیری سریع تر و راحتتر انجام بده . شما می تونید کتابخانه Volley رو از سایت Github دریافت کنید .

تا قیل از انتشار کتابخانه Volley ، برنامه نویس ها برای ارتباطات سمت سرور و توسعه دادن سیستم RESTful بین کلاینت و ریموت سرورشون مجبور بودن که از کلاس استاندارد جاوا با نام java.net.HttpURLConnection و کلاس استاندارد آپاچی با نام org.apache.http.client استفاده کنند .

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

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

به طور کلی دو نوع Request مختلف در کتاب خانه volley وجود دارد که عبارتند از :

  • درخواست آرایه (array request)
  • درخواست آبجکت (object request)

به غیر از request ها بالا دو نوع دیگر نیز وجود دارد مثل StringRequest از این نوع request برای خواندن یک string یا یک فایل txt می توان استفاده کرد.

volley

راهنمای اسفتاده از volley در اندروید

ابتدا باید کتابخانه را اضافه کنید. می توانید از Gradle برای این کار اسفتاده کنید

implementation 'com.android.volley:volley:1.1.0'

حال نحوه ارسال درخواست JsonArrayRequest برای گرفتن آرتیه را بررسی می کنیم

JsonArrayRequest jsonArrayRequest1 = new JsonArrayRequest(متد مورد نظر شما , آدرس , listener , جواب درخواست , خطا پیش آمده)

جال به یک نمونه کد برای استفاده از متد بالا را نشان می دهیم

      RequestQueue requestQueue = Volley.newRequestQueue(context);
        String url = "http://example.com/jsonarray";
        JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.GET, url, null, new Response.Listener<JSONArray>() {
            @Override
            public void onResponse(JSONArray response) {
                try {
                    JSONObject jsonObject= response.getJSONObject(0);
                    String s = jsonObject.getString("title");
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                
            }
        });
        requestQueue.add(jsonArrayRequest);

کتابخانه های بسیاری برای کار با درخواست های سمت سرور وجود دارد.

Retrofit یکی دیکر از این کتابخانه قررتمند است که بزودی آموزشی در زمینه کار با آن قرار خواهیم داد.

 

برای دیدن بقیه مقالات اینجا کلیک کنید

برای دیدن بقیه آموزش های مرتبط با برنامه نویسی اندروید اینجا کلیک کنید

دیدگاه‌ خود را بیان کنید

اشتراک در
اطلاع از
guest

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

2 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها
دیاکو حسنی
دیاکو حسنی
3 سال قبل

توی این کتابخانه یک مشکل هست که تمام اعصاب منو خورد کرده وقتی یک آبجکت برای ارسال به سمت سرور ارسال بشه اگه سرور کند باشه کتابخانه volley درخواست خودش رو چندبار ارسال می کنه وقتی که اولی درج بشه بقیه آبجکت های که ارسال شدن در سرور ذخیره می شوند بعد که دیتابیس رو نگاه می کنی می بینید آیتم شما دو یا سه بار درج شده است من خیلی دنبال این مشکل گشتم چیزی که دستگیرم شد اینه که مقادیر مربوط به RetryPolicy رو مثل زیر دست کاری کنم.

initialTimeoutMs=0
maxNumRetries=-1
backoffMultiplier=DefaultRetryPolicy.DEFAULT_BACKOFF_MULT

ولی بعضی اوقات بازم volley چند بار درخواست رو ارسال می کنه که منو روانی کرده دیگه راهی به ذهنم نمیرسه

سجاد گردکانه
سجاد گردکانه
3 سال قبل
پاسخ به  دیاکو حسنی

با سلام و خسته نباشید
توصیه می شود که برای اسال اطلاعات از فرمت JSON به صورت متنی استفاده کنید یعنی String ارسال بشه توی پارامتر ها با String Params تا در صورتی که دیتا ناقص ارسال بشه سمت سرور چک بشه پارامتر نادرست هست و عملیات ثبت انجام نشه .
از دستور زیر جهت ارسال درخواست استفاده کنید (دستور زیر تا Timeout شدن سرور تکرار نخواهد شد و آیتم یک بار ارسال میشود)
.setDefaultRetryPolicy(new DefaultRetryPolicy(0,-1,DEFAULT_BACKOFF_MULT);
و در صورتی که on Error برگشت حتما time out صورت گرفته است .
همچنین روش بهینه تر ، چک کردن ثبت duplicate در سمت وب سرویس می باشد .

با تشکر از همراهی شما

سبد خرید0
There are no products in the cart!