Hide ProgressBar after successful response from server using Volley

Viewed 504

I am trying to upload multiple videos to the server through API it's similar to WhatsApp.

The videos are getting uploaded successfully.

I am setting a progress bar at the time of upload from my adapter class. However, before I get a successful response from the server that my file has been uploaded, the progressBar disappears. I want the progressBar to be visible until and unless I get the successful Toast message.

Here's my Upload method which I'm using to upload the video media:

    private void uploadVideo(List<String> videoPathList) {
        VideoUrl mVideoUrl = null;
        String reqId = String.valueOf(dbHelper.getRequestId());
        String userId = String.valueOf(dbHelper.getUserId());
        for (int j = 0; j < videoPathList.size(); j++) {
            String fullUrl = videoPathList.get(j);
            int fullLength = fullUrl.length();
            int lastIndex = fullUrl.lastIndexOf("/");
            mVideoUrl = new VideoUrl();
            mVideoUrl.setVideoUrl("/Uploads" + fullUrl.substring(lastIndex, fullLength));
// mVideoUrl.setVideoUrl(videoPathList.get(j));
//VideoUrl videoUrl = new VideoUrl("/Uploads/feedback_09132018023251PM.mp4");
            videoUrlList.add(mVideoUrl);
        }


        mVideoAdapter.notifyDataSetChanged();

        for (int i = 0; i < videoPathList.size(); i++) {
            vidPath = videoPathList.get(i);
            Log.d("Log", "filePath: " + vidPath);

            SimpleMultiPartRequest smpr = new SimpleMultiPartRequest(Request.Method.POST, videoUploadUrl,
                    new Response.Listener<String>() {
                        @Override
                        public void onResponse(String response) {
                            try {
                                JSONArray jsonArray = new JSONArray(response);
                                for (int i = 0; i < jsonArray.length(); i++) {
                                    String url = jsonArray.getJSONObject(i).getString("Url");

                                    Log.d("Log", "response video: " + response);

                                    Toast.makeText(getActivity(), url, Toast.LENGTH_SHORT).show();

                                }

                                mVideoAdapter.notifyDataSetChanged();

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    },
                    new Response.ErrorListener() {
                        @Override
                        public void onErrorResponse(VolleyError error) {
                            Log.d("Log", "video response error: " + error);
                            Toast.makeText(getActivity(), "Uploading error", Toast.LENGTH_SHORT).show();

                        }
                    });

            smpr.addStringParam("Userid", userId);
            smpr.addStringParam("RequestId", String.valueOf(2));
            smpr.addStringParam("ContentType", "2");
            smpr.addFile("File", vidPath);
            Log.d("Log", "filePath smpr: " + vidPath);

            RequestQueue mRequestQue = Volley.newRequestQueue(getActivity());
            mRequestQue.getCache().invalidate(videoUploadUrl, true);
            mRequestQue.add(smpr);
        }

    }

And here's my Adapter class:

@Override
    public void onBindViewHolder(final videoAdapter.videoViewHolder holder, final int position) {
        if (getItemViewType(position) == TYPE_LAYOUT_UPLOAD){
            uploadViewHolder upHolder = (uploadViewHolder) holder;
            upHolder.uploadVideo.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    uploadVideoActivity.onUploadActivity();
                }
            });

        }else {
            final VideoUrl videoUrlList = videoList.get(position-1);
            String videoPath = videoUrlList.getVideoUrl();
            int userType = videoUrlList.getUserType();
            try {
//bMap = retriveVideoFrameFromVideo("http://abcco.ao"+videoPath);
                bMap = retriveVideoFrameFromVideo(videoPath);
            } catch (Throwable throwable) {
                throwable.printStackTrace();
            }

            if (userType == 1){
                holder.removeItem.setVisibility(View.INVISIBLE);
            }else {
                holder.removeItem.setVisibility(View.VISIBLE);
            }



            Glide.with(mContext)
                    .load("http://abc.vcm"+videoPath)
                    .thumbnail(Glide.with(mContext).load("http://abc.vcm"+videoPath))
                    .listener(new RequestListener<Drawable>() {
                        @Override
                        public boolean onLoadFailed(@Nullable GlideException e, Object model, Target<Drawable> target,
                                                    boolean isFirstResource) {
                            holder.pBar.setVisibility(View.GONE);
                            return false;
                        }

                        @Override
                        public boolean onResourceReady(Drawable resource, Object model, Target<Drawable> target, DataSource dataSource,
                                                       boolean isFirstResource) {
                            holder.pBar.setVisibility(View.GONE);
                            return false;
                        }
                    })
                    .into(holder.videoThumb);

            holder.videoThumb.setOnClickListener(new videoClickListener(position));

            holder.removeItem.setOnClickListener(new removeItemClickListener(position));

        }
    }

Here's a sample screenshot of the process. The progress bar is shown, but gets disappeared before the complete response I get from the server.

Screenshot of the Application

1 Answers

Better you could use progress bar inside the uploadVideo() method such as,

Inside onResponse() method

 Log.d("Log", "response video: " + response);
 Toast.makeText(getActivity(), url, Toast.LENGTH_SHORT).show();
 pBar.setVisibility(View.GONE);

Inside Error() method

Log.d("Log", "video response error: " + error);
Toast.makeText(getActivity(), "Uploading error", Toast.LENGTH_SHORT).show();
pBar.setVisibility(View.GONE);

For that you need to initialize progress bar and pass via parameter..

All the best..

Related