آموزش دانلود فایل با volley در اندروید
سلام دوستان عزیر امیدوارم روزهای خوبی را سپری کرده باشید در این سری از آموزش های برنامه نویسی اندروید به آموزش دانلود فایل با volley در اندروید می پردازیم کتابخانه volley فوق العاده قویه هرچند که Structure درستی برای پروژه های خیلی بزرگ نداره ولی خب برای پروژه های دمه دستی میشه از بهره برد در ادامه با ما همراه باشید تا بیشتر با کتابخانه volley و همینطور نحوه دانلود فایل آشنا شوید.
ما باید فایل ها رو در حافظه خارجی یا داخلی گوشی ذخیره کنیم نمی توان فایل های دانلودی را در پوشه از اپ خودمان (مثلا raw) ذخیره کنیم !
ابندا یک کلاس به شکل زیر ایجاد کنید در ادامه توضیح میدیمش !
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 | class InputStreamVolleyRequest extends Request<byte[]> { private final Response.Listener<byte[]> mListener; private Map<String, String> mParams; public Map<String, String> responseHeaders ; public InputStreamVolleyRequest(int method, String mUrl ,Response.Listener<byte[]> listener, Response.ErrorListener errorListener, HashMap<String, String> params) { // TODO Auto-generated constructor stub super(method, mUrl, errorListener); setShouldCache(false); mListener = listener; mParams=params; } @Override protected Map<String, String> getParams() throws com.android.volley.AuthFailureError { return mParams; }; @Override protected void deliverResponse(byte[] response) { mListener.onResponse(response); } @Override protected Response<byte[]> parseNetworkResponse(NetworkResponse response) { responseHeaders = response.headers; return Response.success( response.data, HttpHeaderParser.parseCacheHeaders(response)); } } |
خب در بالا چه چیزی داره اتافق میفته سوال شماست هر فایلی از سرور بخواهید دانلودش کنید به صورت byte در شبکه منشتر می شود پس ما می توانیم byte فایل ها را از سرور بخوانیم و در نهایت byte رو در respone دریافت کنیم و ازش فایل رو ایجاد کنیم.
بعد از اینکه فایل بالا رو ایجاد کردید می توانید با استفاده از کد زیر عمل دانلود رو انجام بدید.
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 | String mUrl= <YOUR_URL>; InputStreamVolleyRequest request = new InputStreamVolleyRequest(Request.Method.GET, mUrl, new Response.Listener<byte[]>() { @Override public void onResponse(byte[] response) { // TODO handle the response try { if (response!=null) { FileOutputStream outputStream; String name=<FILE_NAME_WITH_EXTENSION e.g reference.txt>; outputStream = openFileOutput(name, Context.MODE_PRIVATE); outputStream.write(response); outputStream.close(); Toast.makeText(this, "Download complete.", Toast.LENGTH_LONG).show(); } } catch (Exception e) { // TODO Auto-generated catch block Log.d("KEY_ERROR", "UNABLE TO DOWNLOAD FILE"); e.printStackTrace(); } } } ,new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { // TODO handle the error error.printStackTrace(); } }, null); RequestQueue mRequestQueue = Volley.newRequestQueue(getApplicationContext(), new HurlStack()); mRequestQueue.add(request); |
در کد بالا url خودتون رو قرارب دید و مسیر دانلودی فایل در زیر خواهد بود.
1 | data/data/<your_application>/<file_name> |
این آموزش هم به پایان رسید.
موفق و پیروز باشید.
سلام.خیلی خیلی تشکر از آموزش خوبتون.فقط یه سوال. من دارم اطلاعاتم که چند تا ویدئو هست رو از json دریافت میکنم.حالا میخوام این ویدئو ها رو دانلود کنم.یعنی باید به جای اون url آدرس جی سون رو بزارم.حالا سوال این جاست که چه تغییراتی در سورس باید ایجاد شود؟ json من از نوع آبجکت است.
سلام محمد حسین عزیز،
من میخواستم واسه عید نوروز یک برنامه بنویسم به طوری که اون برنامه به من بگه که چقدر تا عید نوروز مونده(ماه و هفته و روز و ساعت و دقیقه و ثانیه) و همچنین علاوه بر تکست ویو توی اعلان(نوتیفیکیشن)هم نشان بده.
همچنین میخواستم ده ثانیه قبل از تحویل سال یک اکتیویتی اجرا بشه که در آن یا مقلب القلوب خوانده شود و درست هنگام تحویل سال ۹۹ تبریک گفته شود و صفحه تبریک بالا بیاد.
من توی قسمت جاوا مونده ام اگه میشه کامل راهنمایی کنید.
باتشکر
ببخشید میشه بگید چطوری میشه براش Notification گذاشت؟