آموزش Volley در برنامه نویسی اندروید
سلام دوستان امیداوارم سلامت باشید در این سری از آموزش برنامه نویسی اندروید به آموزش Volley در برنامه نویسی اندروید می پردازیم قبلا کتاب خانه volley را معرفی کردیم و نحوه استفاده از volley را برای شما قرار دادیم در این آموزش به دونوع request متفاوت در کتاب خانه volley خواهیم پرداخت در ادامه با ما همراه باشید.
به طور کلی دو نوع Request مختلف در کتاب خانه volley وجود دارد که عبارتند از :
- درخواست آرایه (array request)
- درخواست آبجکت (object request)
به غیر از request ها بالا دو نوع دیگر نیز وجود دارد مثل StringRequest از این نوع request برای خواندن یک string یا یک فایل txt می توان استفاده کرد.
وقتی شما بخواید یک json که به صورت Array شروع می شود را در response بگیرید لازم است request شما به صورت array به سمت سرور ارسال شود در این حالت خروجی نیز از نوع array خواهد علت اصلی استفاده از متود array کتاب خانه volley این است و در صورتی که از این متود استفاده نکنید با خطا JsonArray Exception یا JsonObjet Exception رو به رو خواهیم شد و در حالتی که json ما به صورت object باشد نیز request باید به صورت object request انجام شود در ادامه نمونه های از آن را قرار میدهیم.
برای اینکه از volley در پروژه استفاده کنید لازم است کتاب خانه آن را اضافه کنید برای اینکار خط زیر را در Gradle قرار دهید و پروژه را sync کنید.
1 | compile 'com.android.volley:volley:1.0.0' |
به تازگی برخی از متودهای کتاب خانه volley نیز بروزرسانی شد و شاید در هنگام استفاده از این کتاب خانه در متود های ورودی به خطا خورده باشید.
ابتدا JsonArray Request را بررسی می کنیم شما در لینک زیر می توانید یک JsonArray که ایجاد شده است را مشاهده کنید.
1 | http://programchi.ir/api/JsonArray.php |
خروجی آن همانند زیر می شود.
1 2 3 4 5 6 7 8 9 10 | [ { "id": "1709", "title": "نواردرزجوش لينولئوم مشكي", "model": "1751098" } . . . ] |
در صورتی که لینک بالا را مشاهده کنید یک آرایه از Json را می بینید که شامل یکسری فیلد است.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | String url = "http://programchi.ir/api/JsonArray.php"; JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(url, new Response.Listener<JSONArray>() { @Override public void onResponse(JSONArray response) { progressDialog.dismiss(); itShouldLoadMore = true; if (response.length() <= 0) { Toast.makeText(MainActivity.this, "داده ای وجود ندارد !", Toast.LENGTH_SHORT).show(); return; } for (int i = 0; i < response.length(); i++) { try { JSONObject jsonObject = response.getJSONObject(i); lastId = jsonObject.getString("id"); int id = jsonObject.getInt("id"); String title = jsonObject.getString("title"); String model = jsonObject.getString("model"); } catch (JSONException e) { e.printStackTrace(); } } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { itShouldLoadMore = true; progressDialog.dismiss(); Toast.makeText(MainActivity.this, "خطا در اتصال به اینترنت !", Toast.LENGTH_SHORT).show(); new AlertDialog.Builder(MainActivity.this) .setMessage(error.toString()) .show(); } }); Volley.newRequestQueue(this).add(jsonArrayRequest); |
در بالا در صورتی که در لینک json وجود داشته باشد با استفاده از کتاب خانه volley یک request به شکل آرایه ارسال می شود و نتیجه نیز به صورت آرایه برای شما بر می گردد همانطور که مشاهده می کنید در for هر jsonarray که شامل یک jsonobject است را در یک متغیر به نام jsonObject قرار میدهد سپس در متغیر نام برده می توانیم child ها را دریافت کنیم.
نمونه JsonObject Request را در ادامه خواهیم داشت.
در لینک زیر می توانید نمونه ای از JsonObject را مشاهده کنید.
1 | https://programchi.ir/api/JsonObject.php |
خروجی آن همانند زیر می باشد.
1 2 3 4 5 6 | { "boolean": true, "Data": "Best Programming Site Forever", "number": 123, "site": "Programchi.ir" } |
در بالا یکسری Key و Value داریم.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | String url = "https://programchi.ir/api/JsonObject.php"; JsonObjectRequest jsonArrayRequest = new JsonObjectRequest(Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { progressDialog.dismiss(); itShouldLoadMore = true; JSONObject jsonObj = response; try { if (response.length() <= 0) { Toast.makeText(RequestHistoryActivity.this, "داده ای وجود ندارد !", Toast.LENGTH_SHORT).show(); return; } Boolean _bool = jsonObj.getBoolean("boolean"); String Data= jsonObj.getString("Data"); int number = jsonObj.getString("number"); String site= jsonObj.getString("site"); } catch (Exception e) { } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { itShouldLoadMore = true; progressDialog.dismiss(); Toast.makeText(RequestHistoryActivity.this, "خطا در اتصال به اینترنت !", Toast.LENGTH_SHORT).show(); new AlertDialog.Builder(RequestHistoryActivity.this) .setMessage(error.toString()) .show(); } }); Volley.newRequestQueue(this).add(jsonArrayRequest); |
در بالا هم Response ما نیز به شکل Object برخواهد گشت سپس می توانیم از این Object فرزند ها یا Child ها را دریافت کنیم.
موفق باشید.
با سلام
در کد مربوط به JsonArrayRequest از متغیر lastId که در onResponse تعریف کردید، چه استفاده ای شده؟
سلام و درود
کد بالا یک sample است شما بسته به نیازتون باید آن را تغییر دهید.
با سلام
اگه در وسط فایل json d آرایه داشته باشیم از چه request استفاده میکنیم؟