Я пытаюсь загрузить multiple videos
на сервер через API
это похоже на WhatsApp.
Видео успешно загружаются.
Я устанавливаю индикатор выполнения навремя загрузки из моего adapter
класса.Однако, прежде чем я получу успешный ответ от сервера, что мой файл был загружен, progressBar
исчезнет.Я хочу, чтобы progressBar
был виден до тех пор, пока я не получу успешное сообщение Toast
.
Вот мой метод Upload
, который я использую для загрузки видео:
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);
}
}
А вот мой Adapter
класс:
@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));
}
}
Вот пример скриншота процесса.Индикатор выполнения отображается, но исчезает до получения полного ответа от сервера.