Я хочу загрузить список файлов из моего приложения в Amazon S3 Bucket. Я могу получить прогресс загрузки, но мне не удалось установить значение прогресса загрузки в элементе просмотра переработчика. (Я хочу показать прогресс обмена файлами, как приложение Shareit, при совместном использовании файлов на другом устройстве.)
Я реализовал программу повторного просмотра, и она отлично работает. У меня есть индикатор выполнения и Textview для каждого файла, который будет загружен. Я просто хочу показать прогресс загрузки в индикаторе выполнения и в текстовом представлении каждого элемента.
public void onStateChanged(int id, TransferState state) {
if (state.COMPLETED.equals(observer.getState())) {
Toast.makeText(thisActivity, "File Upload Complete", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {
long _bytesCurrent = bytesCurrent;
long _bytesTotal = bytesTotal;
float percentage = (int) ((float)_bytesCurrent /(float)_bytesTotal * 100);
Log.d("percentage","" + percentage);
}
@Override
public void onError(int id, Exception ex) {
Toast.makeText(thisActivity, "" + ex.getMessage(), Toast.LENGTH_SHORT).show();
Log.d("ErrorMessage","" + ex.getMessage());
}
// Ниже кода адаптера Recyclerview
public class FileListAdapter extends
RecyclerView.Adapter<FileListAdapter.ViewHolder> {
public static ArrayList<String> filePaths;
private RecyclerViewClickListener clicklistener;
private int rowLayout;
private Context mContext;
private ImageView fileThumbnail, fileEdit, fileRemove;
private TextView filePath, fileSize, uploadPrtg;
public ProgressBar uploadProgs;
private int Progress;
private String ProgPos;
public FileListAdapter(ArrayList<String> filePaths, int rowLayout, Context context) {
this.filePaths = filePaths;
this.mContext = context;
this.rowLayout = rowLayout;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(rowLayout, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (ProgPos != null && ProgPos.equalsIgnoreCase(String.valueOf(position))){
uploadProgs.setProgress((int) Progress);
uploadPrtg.setText((int)(Progress)+"%");
}
Context context = holder.itemView.getContext();
File file = new File(filePaths.get(position));
String path = filePaths.get(position);
String extension2 = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("/"));
filePath.setText(extension2);
long length = file.length() / 1024;
fileSize.setText("Size :- " + length + " KB");
String extension = file.getAbsolutePath().substring(file.getAbsolutePath().lastIndexOf("."));
if (extension.equalsIgnoreCase(".mp4")){
fileEdit.setVisibility(View.VISIBLE);
}
if (path != null) {
Glide.with(context)
.load(path)
.into(fileThumbnail);
} else {
fileThumbnail.setImageResource(R.drawable.ic_action_photo);
}
}
public void updateProgress(float percentage, int position){
ProgPos = String.valueOf(position);
Progress = (int) percentage;
filePaths.set(position, String.valueOf(percentage));
notifyDataSetChanged();
}
@Override
public int getItemCount() {
return filePaths.size();
}
public class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener {
ViewHolder(View view) {
super(view);
fileThumbnail = view.findViewById(R.id.file_thumbnail);
filePath = view.findViewById(R.id.file_path);
fileSize = view.findViewById(R.id.file_size);
fileEdit = view.findViewById(R.id.editMyvid);
fileRemove = view.findViewById(R.id.removeMyFile);
uploadProgs = view.findViewById(R.id.progressBar);
uploadProgs.setMax(100);
uploadPrtg = view.findViewById(R.id.txtPercentage);
fileEdit.setVisibility(View.GONE);
view.setTag(view);
fileEdit.setOnClickListener(this);
fileRemove.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (clicklistener != null) {
clicklistener.onItemClick(view, getAdapterPosition());
}
}
}
public void setClickListener(RecyclerViewClickListener itemClickListener) {
this.clicklistener = itemClickListener;
}
public interface RecyclerViewClickListener {
void onItemClick(View v, int position);
}
public void removeAt(int position) {
filePaths.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, filePaths.size());
}
Если кто-то захочет получить код адаптера утилита восстановления, я тоже могу его обновить. Пожалуйста, помогите мне сделать это. Заранее спасибо.