کارگاه آموزشی کتابخانه ی volley در اندروید
کارگاه یک روزه ی آموزش کامل استفاده از کتابخانه ی Volley بصورت ویدیویی و با کیفیت فول Full Hd توسط مهندس نیکزاد تهیه شده است
دموی کارگاه یک روزه ی Volley را مشاهده کنید (دمو با کیفیت HD ارسال شده اما ممکن است به دلایل آپارت به صورت HD برای شما نمایش ندهد به همین منظور روی کیفیت کلیک کنید و HD یا ۷۲۰ را انتخاب کنید تا با کیفیت اصلی مشاهده فرمائید)
فایل jar کتابخانه ی volley و همچنین فیلم آموزش این مقاله بصورت کامل به آخر مقاله افزوده شد . لطفا از آخر این مقاله دیدن کنید .
volley کتابخانه ای شبکه در اندروید میباشد که توسط گوگل در سال ۲۰۱۳ معرفی و تا به امروز توسعه داده شده است . این کتابخانه بخاطر عدم وجود یک کلاس قدرتمند درون SDK اندروید ، که بتواند بدون تداخل به فعالیت های اصلی برنامه ، کارهای شبکه را انجام دهد ، توسعه داده شده است .
قبل از بوجود آمدن این کتابخانه ، برنامه نویس ها مجبور بودند برای کارهای توسعه ی برنامه های مبتنی بر RESTful که ارتباط بین کلاینت و سرور را برقرار میکرد ، از کلاس های java.net.HttpURLConnection که مربوط به java میباشد یا کلاس org.apache.http.client که توسط آپاچی توسعه داده شده بود ، استفاده کنند.
اگر کمی با کلاس های بالا که ذکر شد کار کرده باشید به سرعت متوجه مشکلات و باگ های موجود در آن ها خواهید بود . مثلا اگر بخواهید از سیستم کشینگ استفاده کنید یا درخواست ها را صف بندی کنید ، قابلیت هایی هستند که توسط کتابخانه ی volley به راحتی میتوانید .
۱ . چرا کتابخانه volley ؟
برای جلوگیری از استفاده ی مجدد از HttpUrlConnection
و HttpClient
در نسخه های پایین تر اندروید (بیشتر در نسخه ی های ۲٫۲ و ۲٫۳ اندروید ) کلاس های HttpUrlConnection
و HttpClient
، با مشکلات فراوان و باگ های بسیاری منتشر شدند . مشکلات و باگ هایی که هرگز رفع نشدند .HttpClient
در بروزرسانی نسخه ی api 22 اندروید ، منسوخ اعلام شد . این بدین معنی بود که ممکن است از این کلاس در آینده استفاده نشود و در بروزرسانی های بعدی به کل از SDK اندروید پاک شود که چنین اتفاقی هم افتاد .
من فکر میکنم همین بزرگترین دلیل میتونه باشه که به یه کتابخانه یا کلاس قابل اعتماد ، برای انجام درخواست های شبکه ای در اندروید ، مراجعه کنیم !
برای جلوگیری از استفاده ی کلاس AsyncTask
بعد از منتشر شدن api 11 اندروید ، یک نوع اجباری برای برنامه نویسان اندروید بود که کارهای شبکه یا به اصطلاح دیگر، درخواست های شبکه را درون یک ترد دیگری به جز ترد اصلی برنامه انجام دهند . منظور از ترد همان نخ در برنامه نویسی هستند و در اینجا اشاره به چند نخی دارد ! برنامه نویسان مجیور به فراگیری چند نخی و قراردادن دستورالعملهای مربوط به شبکه درون یک نخ دیگر بودند ، همین موضوع باعث استفاده ی عظیم از AsyncTask<Params, Progress, Result> در این مدت شد .
با استفاده از AsyncTask ، شما باید مقدمات کلاس خود را درون متدی به نام onPreExecute انجام میدادید کارهایی اعم از تعریف context برنامه و …
سپس درخواست های ناهمگام را درون متدی به نام doInBackground
انجام دهید و سپس نتیجه را به onPostExecute هُل دهید و نهایتا” درون همین متد ، نتیجه را به ویوها ارجاع دهید تا نمایش داده شوند .
استفاده از این کلاس بسیار زیبا و سرراست و به همراه تنی از مثال ها و آموزش ها بود .
اما اصلی ترین مشکل کلاس این بود که شما نمیتوانستید هیچ ترتیبی برای درخواست ها قائل شوید و همانطور که میدانید بر اساس الگوریتم FIFO ، به تمام درخواست های درون این کلاس رسیدگی میشود . هر درخواستی جدیدتر از همه باشد سریعتر از همه هم انجام خواهدد شد که باعث بوجود آمدن مشکلاتی در آینده خواهد بود مخصوصا زمانی که درخواست های ما ، اولویت های گوناگون زمانی داشته باشند
در برنامه های اندرویدی فیسبوک و توئیتر و … که از لیست های طولانی استفاده میکردند مشکلاتی بوجود می آمد یکی از این مشکلات به این شرح بود : وقتی که شما یک لیستی را باز میکردید که هر آیتم لیست دارای یک تصویر بند انگشتی بود ، زمان اسکرول به پایین انتظار میرفت که ابتدا JSON لود شود و سپس تصاویر بند انگشتی که الویت بندی کردن در این حالت ها امکان پذیر نبود
کتابخانه ی volley این مشکل را نیز برای برنامه نویسان حل کرد ! دیگر نیازی به چک کردن onPostExecute
نبود و همچنین از خطاهایی مانند NullPointerException که یکی از مشکلات استفاده از کلاس AsyncTask برای درخواست های شبکه ای بود ، جلوگیری به عمل می آمد .
سرعت بالای Volley
چندی پیش تیم گوگل پلاس ، آزمایش هایی را روی تمام روش های ارائه شده برای بهبود سرعت درخواست های شبکه ای داخل برنامه ی اندروید انجام داد . نتیجه ی این آزمایشات حاکی از سرعت بالای volley نسبت به دیگر روش ها ، برای درخواست های شبکه ای مبتنی بر RESTful بود .
volley همه چیز را Cache میکند
volley بطور خودکار تمام درخواست ها را کش میکند و این یعنی صرفه جویی در زمان ، برای درک بهتر بیایید به مثالی که در بالا زدیم برگردیم ، لیستی دراز که درون هر آیتم یک تصویر بند انگشتی و یک متن توضیحی وجود دارد .
حالا فکر کنید چه اتفاقی میوفتد اگر کاربر گوشی خود را بچرخاند ! : اکتیویتی ریستارت میشود ( چرخه ی حیات اکتیویتی ) ، درخواست مجددا از طریق شبکه ارسال میشود و محتویات لیست دوباره دانلود میشود ، بطور خلاصه این عمل یعنی هدر دادن زمان و حجم اینترنت کاربری و همچنین ایجاد حس بد نسبت به برنامه .
در اینجا نیز کتابخانه ی volley بار دیگر توانایی خود را ثابت میکند . Volly تمام کارهایی که انجام گرفته است را میتواند به خاطر بیاورد ، آنها را به متد تخریب اکتیویتی پاس کند و مجددا در متد ساخته شدن مجدد اکتیویتی بازیابی کند ، volley همه چیز را کش میکند بدون اینکه شما نگرانی داشته باشید .
دستورالعمل های کوچک در volley
کتابخانه ی volley بخاطر کدنویسی و فراخوانی های کمتر ، یک کتابخانه ی عالی در زمینه ی درخواست های شبکه در برنامه های اندرویدی هست .درخواست هایی مانند : JSON objects ، دریافت بخش هایی از یک لیست ، چزئیات آیتم انتخاب شده و غیره . همه ی ما میدانیم که volley فقط و فقط با یک هدف بوجود آمده است و آن هم برنامه های مبتنی بر RESTful ، و مطمئنا” هر چیزی مخصوص یک کاری باشد کارآیی بهتری خواهد داشت .
به هرحال کتابخانه ی volley برای کارهایی نیز نامناسب میباشد ، کارهایی مانند stream کردن یا دانلود های عظیم . لازم به ذکر است که نام این کتابخانه هیچ ارتباطی به ورزش والیبال ندارد و نام این کتابخانه نیز از لغتنامه ی ورزشی انتخاب نشده است
۲ . بررسی هسته ی کتابخانه ی volley
کتابخانه ی volley از سه سطح مختلف تشکیل شده است که هر کدام از سطح های آن ، در ترد خود عمل میکند

سطوح مختلف کتابخانه ی volley اندروید
ترد اصلی در کتابخانه ی Volley
در این مقاله منظور از کلمه ی “ترد” همان thread یا نخ میباشد
در thread اصلی volley همانند AsyncTask ، شما فقط اجازه ی ایجاد و ارسال درخواست ها و همچنین دریافت پاسخ ها را دارید نه چیز بیشتر !
نتیجه ی اصلی این هست که شما هر کاری را که در متد doInBackground درون کلاس AsyncTask
انجام میداد را بتوانید به راحتی فراموش کنید چون کتابخانه ی volley بطور خودکار درخواست های HTTP را مدیریت میکند و خطاهای شبکه را که برای شما اهمیت دارند را شناسایی میکند
کَش و ترد های شبکه در کتابخانه ی Volley
وقتی شما درخواست جدیدی را در صف درخواست های volley قرار میدهید چندین عمل در هسته ی کتابخانه انجام میگیرد ، اول از همه volley کش را بررسی میکند و اگر توانایی پاسخ از طریق کش را داشته باشد ، پاسخی که کش تحویل میدهد را میخواند پارس میکند و بعنوان پاسخی برای درخواست تحویل میدهد . به عبارت دیگر این پاسخ به تردهای شبکه تحویل داده میشود که در زیر توضیح داده میشود .
در تردهای شبکه ، یک درخواست به همراه یک سری از ترد ها بطور مداوم در حال فعالیت هستند ، اولین ترد شبکه ی در دسترسی به درخواست رسیدگی میکند و درخواست HTTP را صادر میکند ، نتیجه را تجزیه و تحلیل و یا به اصطلاح پارس میکند ، همچنین نتیجه را در کش ذخیره میکند ، در نهایت نتیجه به ترد اصلی برنامه تحویل داده میشود همان جایی که listener منتظر دریافت پاسخ هست .
۳ . شروع کار با Volley
گام اول : افزودن کتابخانه ی volley به پروژه
اگر از محیط اندروید استودیو استفاده میکنید میتوانید به روش های زیر کتابخانه ی volley را به محیط پروژه ی خود اضافه کنید
یکی از راه ها دانلود کردن فایل jar کتابخانه ی volley می باشد و راه دیگر افزودن این پروژه بصورت آنلاین از طریق گردل میباشد در این مقاله قصد ما آموزش نحوه ی ایمپورت کردن کتابخانه نیست و اطلاعات بیشتر در مورد نحوه ی افزودن کتابخانه به محیط اندروید استودیو یا ایکلیپس را به خودتان محول میکنیم و فقط بطور مختصر نحوه ی افزودن انها در محیط اندروید استودیو را ذکر میکنیم :
برای اضافه کردن انلاین باید فایل build.gradle پروژه ی خود را باز کنید و در قسمت dependency خط زیر را اضافه کنید تا بطور خودکار دانلود و به پروژه ی شما اضافه شود :
compile 'com.mcxiaoke.volley:library-aar:1.0.15'
و یا اینکه فایل jar این کتابخانه را دانلود کنید و در پوشه ی libs پروژه ی خود کپی کنید و روی فایل راست کلیک کرده و add as library را بزنید تا به راحتی به پروژه ی شما افزوده شود
گام دوم: نحوه ی استفاده از کتابخانه ی volley
کتابخانه ی volley اکثر اوقات با دو کلاس سر و کار دارد ، کلاس های RequestQueue
و Request . شما ابتدا بایستی یک RequestQueue بسازید که ترد فعالیت را مدیریت میکند و نتایج پارس شده را تحویل ترد اصلی میدهد. سپس شما یک یا چند شی از نوع Request
را اضافه میکنید .
متد سازنده ی Request
همیشه پارامتری را بعنوان نوع متد (GET , POST و …) ، URL منبع ، Listener های رویداد ها دربر دارد . سپس بسته به نوع درخواست ممکن است متغیرهای و پارامترهای بیشتری نیز طلب کند .
در مثال زیر ، من یک شی RequestQueue
درست کردم با فراخوانی یکی از راحت ترین متدهای volley به نام Volley.newRequestQueue .
مثال زیر یک شی RequestQueue
به همراه مقادیر پیشفرضی که در volley تعریف شده است را ایجاد میکند :
String url = "http://httpbin.org/html"; // Request a string response StringRequest stringRequest = new StringRequest(Request.Method.GET, url, new Response.Listener<String>() { @Override public void onResponse(String response) { // Result handling System.out.println(response.substring(0,100)); } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // Error handling System.out.println("Something went wrong!"); error.printStackTrace(); } }); // Add the request to the queue Volley.newRequestQueue(this).add(stringRequest);
همانطور که میبینید به طرز عجیبی این کدهای ساده و راحت هستند ، شما درخواست را ایجاد کرده اید و سپس به صف درخواست ها اضافه کرده اید و کارتان تمام شده است .
توجه کنید که کدهای listener شما مشابه با AsyncTask.onPostExecute در کلاس AsyncTask خواهد بود فقط نامش onResponse هست به همین سادگی !
این اتفاقی نیست ، توسعه دهندگانی که از volley استفاده کرده اند ، تفاوت و سادگی متدهای volley نسبت به AsyncTask را درک میکنند
اگر شما درخواست های گوناگون در اکتیویتی های متفاوت را دارید شما باید از معماری بالا اجتناب کنید ، Volley.newRequestQueue.add .
بهتر است شما از یک صف به اشتراک گذاری شده بین درخواست های خود استفاده کنید :
MySingletonClass.getInstance().getRequestQueue().add(myRequest);
۴ دست به کار شوید ( آموزش کتابخانه ی volley در اندروید )در دامه ی همین آموزش به این چنین کاربردهایی اشاره خواهم کرد و آموزش هایی نیز برای شما خواهم گفت .
کتابخانه ی volley سه نوع درخواست پرکاربرد دارد :
StringRequest
ImageRequest
JsonRequest
همه ی این کلاس ها از کلاس Result
ارث بری میکنند که قبلا از آن استفاده کردیم . در مثال بالا با StringRequest
آشنا شدیم بیایید با یک نوع کاربرد JsonRequest
آشنا شویم به کدهای زیر نگاهی بیاندازید :
String url = "http://httpbin.org/get?site=code&network=tutsplus"; JsonObjectRequest jsonRequest = new JsonObjectRequest (Request.Method.GET, url, null, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { // the response is already constructed as a JSONObject! try { response = response.getJSONObject("args"); String site = response.getString("site"), network = response.getString("network"); System.out.println("Site: "+site+"\nNetwork: "+network); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } }); Volley.newRequestQueue(this).add(jsonRequest);
همانند قبل ، اولین پارامتر ورودی سازنده ی این کلاس ، نوع درخواست HTTP میباشد ، سپس شما بایستی URL که قرار است JSON از آن فراخوانی شود را ارائه دهید . سومین پارامتر که در مثال بالا هم مقدار null هست این پاارامتر نشان میدهد که هیچ پارامتری به همراه درخواست ارسال نمیشود همانطور که می بینید ، نوع نتیجه ی بازگشتی متد JSONObject هست . اگر تمایل داشته باشید همچنین میتوانید یک JSONArray
داشته باشید با استفاده از JsonArrayRequest
بجای JsonObjectRequest .
درنهایت ، شما یک listener برای دریافت پاسخ JSON یا خطاهای احتمالی دارید همچنین شما میتوانید با درج null
از خطاها جشم پوشی کنید
واکشی تصاویر ، مقداری تفاوت میکند ، سه راه ممکن برای واکشی تصاویر وجود دارد . ImageRequest
یکی از استانداردترین راه هاست در این روش تصاویر در ImageView رایج نمایش داده میشود از طریق URL ارائه شده .
تمام عملیات اعم از دیکد کردن و تغییر سایز که شما میخواهید والی برای شما انجام دهد درون ترد کارگر (worker thread ) انجام میگیرد .
گزینه ی دوم استفاده از کلاس ImageLoader
هست ، که برای درخواست های فراوان کاربرد دارد ، برای مثال ساختن یک Listview از تصاویر گزینه ی مناسبی هست .
سومین راه ، استفاده از NetworkImageView هست ، که در آن لیستی از XML بجای ImageView استفاده میشود .
به مثال زیر نگاه کنید :
String url = "http://i.imgur.com/Nwk25LA.jpg"; mImageView = (ImageView) findViewById(R.id.image); ImageRequest imgRequest = new ImageRequest(url, new Response.Listener<Bitmap>() { @Override public void onResponse(Bitmap response) { mImageView.setImageBitmap(response); } }, ۰, ۰, ImageView.ScaleType.FIT_XY, Bitmap.Config.ARGB_8888, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { mImageView.setBackgroundColor(Color.parseColor("#ff0000")); error.printStackTrace(); } }); Volley.newRequestQueue(this).add(imgRequest);
سومین و چهارمین پارامتر اعداد صحیحی هستند که نشان دهنده ی حداکثر عرض و طول تصویر هستند (maxWidth
و maxHeight ) . شما میتوانید با قرار دادن مقدار ۰ این پارامترها را نادیده بگیرید بعد از آن ImageRequest
از شما در مورد ScaleType
، که برای محاسبات تغییر اندازه و همچنین دیکد کردن bitmap نیاز هست سوال میکند من پیشنهاد میکنم از Bitmap.Config.ARGB_8888 استفاده کنید . و در نهایت یک listener برای خطا گذاشته ایم کار تمام است .اولین پارامتر آدرس URL تصویری هست که قصد واکشی آنرا داریم و پارامتر دومی نتیجه ای هست که بازگردانده میشود .
توجه کنید که volley اولویت این درخواست را بطور خودکار روی LOW تنظیم میکند
// Snippet taken from ImageRequest.java, // in the Volley source code @Override public Priority getPriority() { return Priority.LOW; }
سوئیچ کردن از یک درخواست GET به درخواست POST در Volley کار ساده ای هست ، شما باید Request.Method را که در متد سازنده ی کلاس درخواست وجود دارد را تغییر دهید و getParams
دوباره override کنید ، با نتیجه ی بازگشتی مناسب Map<String, String> که شامل پارامترهای درخواست هست
ساخت یک درخواست POST در کتابخانه ی Volley
String url = "http://httpbin.org/post"; StringRequest postRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() { @Override public void onResponse(String response) { try { JSONObject jsonResponse = new JSONObject(response).getJSONObject("form"); String site = jsonResponse.getString("site"), network = jsonResponse.getString("network"); System.out.println("Site: "+site+"\nNetwork: "+network); } catch (JSONException e) { e.printStackTrace(); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { error.printStackTrace(); } } ) { @Override protected Map<String, String> getParams() { Map<String, String> params = new HashMap<>(); // the POST parameters: params.put("site", "code"); params.put("network", "tutsplus"); return params; } }; Volley.newRequestQueue(this).add(postRequest);
اگر میخواهید تمام درخواست های volley را لغو کنید قطعه کد زیر را به متد onStop
اضافه کنید
لغو یک درخواست در کتابخانه ی volley
@Override protected void onStop() { super.onStop(); mRequestQueue.cancelAll(new RequestQueue.RequestFilter() { @Override public boolean apply(Request<?> request) { // do I have to cancel this? return true; // -> always yes } }); }
درخواست های POST و PUT ، به هر حال ، بایستی به کار خود ادامه دهند حتی اگر کاربر اکتیویتی را عوض کند . ما چنین کاری رو توسط تعریف tag ها نیز میتوانیم انجام دهیم ، وقتی که درخواست از نوع GET درست میکنید خط های زیر را برای افزودن tag اضافه کنید : این تنها راه هست و شما نیازی نیست که در مورد destroy کردن اکتیویتی توسط کاربر هنگام دریافت پاسخ از volley باشید . در چنین حالتی یک خطای NullPointerException
رخ خواهد داد .
// after declaring your request request.setTag("GET"); mRequestQueue.add(request);
برای لغو تمام درخواست های GET که در حال انجام هستند یا در انتظار انجام هستند ، خط زیر را به سادگی میتوانید اضافه کنید :
mRequestQueue.cancelAll("GET");
مدیریت کوکی های و اولویت بندی درخواست ها در کتابخانه ی Volley این روش تنها درخواست های نوع GET را لغو میکند و دیگر درخواست ها دست نخورده باقی خواهد ماند .
کتابخانه ی volley بطور رسمی متدی را آماده نکرده است که با آن کوکی ها را مدیریت کرد و یا درخواست ها را اولویت بندی ، شاید در نسخه ی های بعدی این کمبود گنجانده شود ، به هر حال شما باید از کلاس Request ارث بری کنید .
برای مدیریت کوکی ها شما میتوانید با هدر های یک درخواست بازی کنید ، از متد getHeaders استفاده کنید :
public class CustomRequest extends JsonObjectRequest { // Since we're extending a Request class // we just use its constructor public CustomRequest(int method, String url, JSONObject jsonRequest, Response.Listener<JSONObject> listener, Response.ErrorListener errorListener) { super(method, url, jsonRequest, listener, errorListener); } private Map<String, String> headers = new HashMap<>(); /** * Custom class! */ public void setCookies(List<String> cookies) { StringBuilder sb = new StringBuilder(); for (String cookie : cookies) { sb.append(cookie).append("; "); } headers.put("Cookie", sb.toString()); } @Override public Map<String, String> getHeaders() throws AuthFailureError { return headers; } }
با این پیاده سازی شما میتوانید ، لیستی از کوکی های درخواست را با استفاده از setCookies آماده کنید .
/ Firstly, you create the list of the cookies, // conformed to the HTTP conventions // i.e. key=value List<String> cookies = new ArrayList<>(); cookies.add("site=code"); cookies.add("network=tutsplus"); // then you invoke your custom method customRequest.setCookies(cookies); // and finally add the request to the queue Volley.newRequestQueue(this).add(customRequest);
برای اولویت ، شما باید از کلاس Request
ارث بری کنید و متد getPriority
را بنویسید ، چیزی که مینویسید مشابه کدهای زیر خواهد بود :
Priority mPriority; public void setPriority(Priority priority) { mPriority = priority; } @Override public Priority getPriority() { // If you didn't use the setPriority method, // the priority is automatically set to NORMAL return mPriority != null ? mPriority : Priority.NORMAL;
سپس ، در ترد اصلی ، خط زیر را برای اولویت بندی درخواست بنویسید :
customRequest.setPriority(Priority.HIGH);
شما میتوانید از چهار حالت زیر استفاده کنید :
Priority.LOW // images, thumbnails, ... Priority.NORMAL // residual Priority.HIGH // descriptions, lists, ... Priority.IMMEDIATE // login, logout, ...
نتیجه گیری در مورد کتابخانه ی volley
در این مقاله نگاهی به کاربرد و نحوه ی کار کردن کتابخانه ی volley انداختیم. در ابتدا دیدیم که کجا و چطور این کتابخانه برای درخواست های مبتنی بر شبکه ، نسبت به روش های دیگر بهتر است ، سپس وارد جزئیات کتابخانه شدیم ، نحوه ی گردش فعالیت ها و انواع درخواست های پشتیبانی شده را دیدیم .
در نهایت دست به کار شدیم و با آوردن مثال هایی سعی کردیم مطلب را روشن تر و کامل تر بیان کنیم ،
در آموزش های بعدی در این زمینه و در مورد کتابخانه ی Volley سعی میکنیم آموزشی پروژه محور تهیه کنیم
موفق و پیروز باشید
فایل jar برای نصب کتابخانه ی volley اضافه شد . در صورت نیاز از اینجا دانلود کنید .
.

سلام
برای استفاده از این کتابخانه در بیسیک فر اندروید نیاز به یک فایل ایکس ام ال هم هست اونو چطوری تهیه کنم؟
سلام . متاسفانه ما با بیسیک فوراندروید کار نمیکنیم
با احترام
تیم سامنتا
باسلام و درود
این آموزش تو محیط بیسک فور اندروید هستش یا ربطی نداره وبا این آموزش میتوان apiاینستاگرام که اطلاعات بهمون میده رو بخونیم
با تشکر
سلام ارتباطی با زبان یا محیط برنامه نویسی نداره
سلام
ببخشید من یک برنامه نوشتم که یه سری داده ها رو باید از rss یک سایت بگیره و نشون بده و این عملیات گرفتن دیتا در بک گراند و با استفاده از asyntask انجام میشه اما با دیتای گوشی خییییلی کنده
نمیدونم چیکارش کنم؟
آیا راهی هست که سرعت asyntask رو زیاد کنم؟
اگه راهنمایی کنید ممنون میشم
سلام AsyncTask منسوخ شده و به همین علت حتما باید با volley کار کنید
یعنی volly نیاز منو کامل برطرف میکنه؟
به نظرتون سرعت منو بهبود میده؟
به جز volley کتابخونه دیگه ای هم سراغ دارید
سپاسگزارم
لطفا یکبار متن بالا و آموزش بالا رو بخونید
سلام و خداقوت
واااقعا ممنون که فایل jar این کتابخونه رو هم قرار دادید، واااقعا دنبالش بودم…
خدا خیرتون بده.
یاعلی
سلام مجدد ، لطفا یک توضیح در مورد امنیت دریافت و ارسال اطلاعات با json هم بدید. مثلا از صفحه json که اطلاعات رو میگیریم چیکار کنیم که اگر کسی اون آدرس رو بزنه نتونه فیلدهارو ببینه و فقط توسط برنامه خودمون قابل دسترسی باشه.
باتشکر
با سلام
من فیلم اموزشی رو خریداری کردم و با موفقیت تونستم انجام بدم فقط اگر آموزشی دارید در مورد اینکه فیلدهای جیسون رو که دریافت میکنیم چطوری به تک تک هر فیلد دسترسی داشته باشم و داخل یک متغیر بتونم ذخیره کنم که ازشون استفاده کنم؟
سلام این مورد که میفرمائید مربوط به پارس کردن جیسان هست که باید از روش های مختلفی استفاده کنید از جمله GSON رو میتونید استفاده کنید تا بتونید داده های جیسان رو پارس کنید
آیا این روش Gson که میفرمائید، در آموزش ساخت اپلیکیشن دیوار استفاده میشه که من اونم خریداری کنم؟
سلام در دوره ی آموزش ساخت دیوار تمام موارد مورد نیاز برای پارس کردن جیسان گفته میشه میتونید تهیه کنید و مشکلتون رو بصورت کامل رفع کنید
volleyخسته نباشید من دستوراتم خطا نداره وارد متد
میشه ولی کاری انجام نمیشه حتی خطا
برای چی هستش ممنون
سلام متوجه منظورتون نشدم اگه ممکنه بیشتر در مورد خطا توضیح بدید راهنمایی کنم
لطفا دستورات کش تصاویر رو هم توضیح بدین
با سلام و عرض ادب و تشکر
بنده این آموزش رو تهیه کردم
فقط مشکلی داشتم
در قسمت جیسون ها همونطور که میدونید کل مقدار همراه با کوتیشن ها و آکولاد ها برگشت داده میشه. راهی نیست که فقط اطلاعات نمایش داده بشه؟؟ تشکر
سلام با تشکر از خرید شما
منظورتون از اینکه اطلاعات نمایش داده بشه رو نفهمیدم ؟
همانطور که خودتان نیز گفتید داده های جیسان با استفاده از آکولادها و کوتیشین ها و … نمایش داده میشه اصل کار جیسان هم همین هست که فرمت مربوط به جیسان رعایت بشه در غیر این صورت باید از روش های دیگر استفاده کنید و جیسان مناسب شما نیست
توجه کنید که اگر مایل هستید خروجی شما استاندارد باشه باید قواعد جیسان را رعایت بکنید .
سلام من این اموزش و خریداری کردم اما لینک دانلود برام ارسال نشد .
سلام ایمیل مجدد ارسال شد خدمتتون
سلام
فایل جار داخل لینک نیست. لطفا پیگیری کنید. تشکر
سلام
فایل jar خود گوگل مجدد آپلود شد
از اینجا دانلود کنید
هر چند استفاده از این روش راحت تر میباشد ولی توصیه میکنم طبق آموزش ویدیویی بالا حتما از طریق gradle و بصورت آنلاین پروژه ی volley را به محیط اندروید استودیو خود اضافه کنید تا از بروزترین نسخه ی استفاده شود و مشکلات دیگری رخ ندهد.
با تشکر
سلام آقای نیک زاد
من اندرویدنویسی می کنم و با این کتابخانه هم کار می کنم و درست هم کار میکنه
فقط می خواهم فایل هم به سرور ارسال کنم ولی هرکاری کردم نشد
اگر ممکن است این مشکل منو حل کنید هرچی که قیمت بدهید من تقدیم می کنم
فقط یه تکه کد ارسال فایل با این کتابخانه و کد بخش سرور که با php باید باشه. خیلی گیر کرده ام . کل پروژه ام منتظر این بخش می باشد
لطفا جواب بدهید
r.mizbani@yahoo.com
ممنون
سلام
دوست عزیز برای ارسال فایل به سمت سرور لینک های زیر میتواند راه گشا باشد
اگر هم چنان مشکلتان حل نشد ایمیل بزنید تا براتون انجام بدم
بنده آموزشتون رو کامل خوندم و خیلی نکات توش بود که واقعا عالی و به درد بخور بود لطفا توضیحات بالا را طوری بنویسید که مراجعه کننده سردرگم نشود .دوستان این مقاله کپی از اینترنت یا جای دیگه نیست فوق العاده هست
مخصوص قسمت کدهاش که خیلی کمک کرد
سلام خیلی ممنون از نظرتون و بنده خیلی خوشحالم که در این زمینه تونستم کاری برای شما انجام بدم
برای حمایت ازتون . لینک این مطلب رو داخل کانال اسفندونه منتشر کردیم.
سلام خیلی ممنونم از لطفتون .
لطفا آیدی کانالتون رو بزارید
سلام سایت آموزشیتون عالیه امیدوارم ادامه داشته باشه
خواهش میکنم حتما ادامه خواهیم داد
سلام مقالتون فوق العاده بود
خیلی ممنون از مقاله ی خوبت
آقا عالی بود واقعا ممنون.
خوااهش میکنم امیدوارم همیشه سایت ما مفید واقع بشه
http://s6.picofile.com/file/8253768792/werf423tr2qege4gt.jpg
لینک عکس ارور
سلام
من کد بخش
ساخت یک درخواست POST در کتابخانه ی Volley
رو کپی کردم تیو یه ONclick listenier
اما خط اخر کد شما ارور میگیره
Volley.newRequestQueue(this).add(postRequest);
روی کلمه ی this ارور میده
اینم عکس ارور
ممنون میشم وقتی جواب دادین یه ایمیل به من بزنید
ممکنه به این خاطر باشه که شما درون متد رویدادِ کلیک ، صف والی رو فراخوانی میکند و برای حل این مشکل قبل از
this
حتما نام اکتیویتی رو درج کنید
مثلا اینطوری بنویسید :
Volley.newRequestQueue(MainActivity.this).add(postRequest);
سلام عالی بود دستتون درد نکنه
سلام
بسیار عالی بود
موفق باشید
خواهش میکنم نظر لطف شماست