اذهب إلى المحتوى
  • 0

كيف يمكنني إضافة Progress Bar لعرض تقدم عملية رفع الملف في تطبيق Android؟

Drive Man

السؤال

private void uploadvideo(final String pdfname, Uri pdffile){
        InputStream iStream = null;

        try {

            iStream = getContentResolver().openInputStream(pdffile);
            final byte[] inputData = getBytes(iStream);
            String oo=String.valueOf(inputData);
            Log.d("finalert",oo);
            VolleyMultipartRequest volleyMultipartRequest = new VolleyMultipartRequest(Request.Method.POST, URLphp,
                    new Response.Listener<NetworkResponse>() {
                        @Override
                        public void onResponse(NetworkResponse response) {
                        progressDialog.dismiss();
                            Log.d("ressssssoo",new String(response.data));
                            Toast.makeText(uploadved.this,new String(response.data), Toast.LENGTH_SHORT).show();
                            String tt=new String(response.data);
                            if (tt=="منشورك موجود الان بالعامة شكرا لتفاعلك معنا"){
                                //startActivity(new Intent(uploadved.this,watchervedio.class));
                                Toast.makeText(uploadved.this, "yes", Toast.LENGTH_SHORT).show();
                            }
                            rQueue.getCache().clear();
                            try {
                                JSONObject jsonObject = new JSONObject(new String(response.data));
                                //Toast.makeText(uploadved.this, response.toString(), Toast.LENGTH_SHORT).show();


                            } catch (JSONException e) {
                                Toast.makeText(uploadved.this, "", Toast.LENGTH_SHORT).show();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_SHORT).show();
                        }
                    }) {

                /*
                 * If you want to add more parameters with the image
                 * you can do it here
                 * here we have only one parameter with the image
                 * which is tags
                 * */
                @Override
                protected Map<String,String> getParams() throws AuthFailureError {
                    Map<String,String> params = new HashMap<>();
                    params.put("***", shall.getInstance(uploadved.this).getuserShow());
                    params.put("****", shall.getInstance(uploadved.this).getimage());
                    params.put("***", shall.getInstance(uploadved.this).getid());
                    params.put("***",enwanvido);
                    return params;
                }

                /*
                 *pass files using below method
                 * */
                @Override
                protected Map<String, DataPart> getByteData() {
                    Map<String, DataPart> params = new HashMap<>();
                    params.put("***", new DataPart(pdfname ,inputData));
                    Log.d("testerget work","workingpartdata");
                    return params;
                }
            };



            volleyMultipartRequest.setRetryPolicy(new DefaultRetryPolicy(
                    0,
                    DefaultRetryPolicy.DEFAULT_MAX_RETRIES,
                    DefaultRetryPolicy.DEFAULT_BACKOFF_MULT));
            rQueue = Volley.newRequestQueue(uploadved.this);
            rQueue.add(volleyMultipartRequest);



        } catch (FileNotFoundException e) {
            Toast.makeText(this, "لم يتم التعرف على الملف ", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            Toast.makeText(this, "هناك مشكلة بالانترنت  ", Toast.LENGTH_SHORT).show();
        }


    }

    public byte[] getBytes(InputStream inputStream) throws IOException {
        ByteArrayOutputStream byteBuffer = new ByteArrayOutputStream();
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];
        int len = 0;
        int fileSize = inputStream.read();

        long uploadedBytes = 0;
        while ((len = inputStream.read(buffer)) != -1) {
            byteBuffer.write(buffer, 0, len);




        }

        return byteBuffer.toByteArray();
    }

 

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

1- أولاً عليك بإضافة متغير للتتبع وعرض تقدم التحميل في النافذة الحالية، ولنفترض أن المتغير يسمى progressBar.

2- بعد ذلك في الدالة uploadvideo(), بعد السطر:

iStream = getContentResolver().openInputStream(pdffile);،

قم بإضافة الكود التالي:

int fileLength = iStream.available();

وهذا سيحسب حجم الملف المراد تحميله.

3- في داخل الحلقة while في دالة getBytes(), بعد السطر byteBuffer.write(buffer, 0, len);، قم بإضافة الكود التالي:

uploadedBytes += len;
int progress = (int) ((uploadedBytes * 100) / fileLength);
updateProgressBar(progress);

وهو يحسب حجم البيانات المحملة حتى الآن ويحسب التقدم بنسبة مئوية، وتستدعى الدالة updateProgressBar() لتحديث قيمة progress bar بناءً على التقدم.

4- إضافة الدالة updateProgressBar() في النشاط الحالي (activity) لتحديث قيمة progress bar:

private void updateProgressBar(int progress) {
    progressBar.setProgress(progress);
}

5- تعديل المكان المناسب في الكود لإنشاء وعرض progress bar، وتستطيع إضافته في أي مكان ترغب فيه.

مثلاً ، إضافة الكود التالي في بداية uploadvideo():

progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 20);
progressBar.setLayoutParams(params);
progressBar.setProgress(0);
progressBar.setMax(100);
layout.addView(progressBar);

حيث layout هو عنصر من واجهة المستخدم يحتوي على العناصر التي تظهر فيها progress bar، وبإمكانك استبدال layout بعنصر آخر في واجهة المستخدم الخاصة بك.

وعليك استيراد المكتبات اللازمة وتعديل الأسماء المطلوبة وفقًا لما تريده في الكود.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 2‏/6‏/2023 at 01:38 قال Mustafa Suleiman:
progressBar = new ProgressBar(this, null, android.R.attr.progressBarStyleHorizontal);
LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, 20);
progressBar.setLayoutParams(params);
progressBar.setProgress(0);
progressBar.setMax(100);
layout.addView(progressBar);

مش فاهم النقطة الاخيرة دى 

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 11 ساعة قال Drive Man:

مش فاهم النقطة الاخيرة دى 

 

هذا الكود ينشئ شريط تقدم (progress bar) في تطبيق Android كالتالي

السطر الأول في الكود يقوم بإنشاء ProgressBar object جديد باستخدام ال constructor الذي يأخذ ثلاثة مدخلات:

  • Context object: وهو العنصر الذي يحتوي على الإطار الزمني للتطبيق والذي يسمح باستخدام موارد النظام.
  • AttributeSet object: وهو معيار إدخال يحتوي على السمات الخاصة بالعنصر. في هذه الحالة ، يتم تمرير null.
  • ProgressBar style: وهو النمط الذي يستخدم لتحديد شكل الشريط. في هذه الحالة يتم استخدام النمط progressBarStyleHorizontal لتحديد شكل الشريط الأفقي.

السطر الثاني في الكود يقوم بإنشاء LinearLayout.LayoutParams object جديد وتعيين القيم اللازمة لعرض وارتفاع الشريط. يتم تعيين قيمة العرض إلى MATCH_PARENT وهي تعني أن الشريط سوف يأخذ عرضًا مماثلًا لعرض عنصر الأب الذي يحتوي عليه. ويتم تعيين الارتفاع إلى 20dp، ويتم تمرير هذه القيم إلى الشريط باستخدام setLayoutParams() method.

السطر الثالث في الكود يقوم بتعيين القيمة الافتراضية للشريط باستخدام setProgress() method. يتم تعيين القيمة الحالية للشريط إلى الصفر في هذه الحالة.

السطر الرابع في الكود يقوم بتعيين الحد الأقصى للشريط باستخدام setMax() method. يتم تحديد الحد الأقصى للشريط إلى 100 في هذه الحالة.

السطر الخامس في الكود يقوم بإضافة الشريط إلى الـ layout الخاص به باستخدام addView() method. يتم تمرير الشريط الذي تم إنشاؤه في السطر الأول إلى الـ layout باستخدام هذا الـ method.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...