Anonymous
Загрузка видео партиями по 20 штук в Android Java
Сообщение
Anonymous » 25 окт 2024, 09:51
Я хочу загружать видео партиями по 20, чтобы мое приложение не зависало. Мое приложение загружает все видео одновременно, из-за чего оно тормозит или иногда выходит из строя.
Код: Выделить всё
public class AllVideosActivity extends AppCompatActivity {
ActivityAllVideosBinding binding;
ArrayList videoList;
ListVideoAdapter adapter;
String foldername;
String folderPath;
private static String AD_UNIT_BANNER = "ca-app-pub-3940256099942544/9214589741";
public static InterstitialAd interaddds;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = ActivityAllVideosBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
binding.foldertitle.setSelected(true);
folderPath = getIntent().getStringExtra("folderPath");
videoList = new ArrayList();
ArrayUtil.videoItemArrayList = new ArrayList();
ArrayUtil.videoItemArrayList.addAll(videoList);
adapter = new ListVideoAdapter(videoList, this, 1, new OnClickAdapter() {
@Override
public void onClick(int position) {
Intent intent = new Intent(AllVideosActivity.this, VideoPlaingActivity.class);
intent.putExtra("position", position);
intent.putExtra("videotitle", videoList.get(position).getVideoName());
intent.putExtra("videopath", videoList.get(position).getVideoPath());
intent.putExtra("foldername", foldername);
startActivity(intent);
}
});
listVideos();
binding.videolist.setLayoutManager(new LinearLayoutManager(this));
binding.videolist.setAdapter(adapter);
foldername = getIntent().getStringExtra("folderName");
binding.foldertitle.setText(foldername);
binding.back.setOnClickListener(v -> {
onBackPressed();
});
}
private void listVideos() {
Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
String[] projection = {
MediaStore.Video.Media.TITLE,
MediaStore.Video.Media.DATA,
MediaStore.Video.Media.SIZE,
MediaStore.Video.Media.DURATION,
MediaStore.Video.Media.DATE_MODIFIED
};
String selection = MediaStore.Video.Media.DATA + " like ?";
String[] selectionArgs = new String[]{"%" + folderPath + "%"};
String sortOrder = MediaStore.Video.Media.DATE_MODIFIED + " DESC";
Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder);
if (cursor != null) {
while (cursor.moveToNext()) {
String videoName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
String videoPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
String videoDuration = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
long videoSize = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));
long modifiedDateMillis = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATE_MODIFIED)) * 1000L;
String formattedDate = new SimpleDateFormat(" dd MMM", Locale.getDefault()).format(modifiedDateMillis);
VideoItem videoItem = new VideoItem(videoName, videoPath, videoDuration, videoSize, formattedDate, null);
videoList.add(videoItem);
ArrayUtil.videoItemArrayList.add(videoItem);
}
cursor.close();
}
}
@Override
protected void attachBaseContext(Context newBase) {
SharedPreferences sharedPreferences = newBase.getSharedPreferences("LanguagePrefs", Context.MODE_PRIVATE);
String keylott = sharedPreferences.getString("keylot", "en");
super.attachBaseContext(LocaleHelper.setLocale(newBase, keylott));
}
}
В этом коде я получаю видео со своего телефона и показываю их в своем приложении. Я хочу сначала загрузить только 20 видео, а затем, если пользователь прокрутит вниз, следующие 20 видео должны быть загружены автоматически. Однако во время моего вызова все видео загружаются одновременно.
Как загрузить только 20 видео одновременно?
Подробнее здесь:
https://stackoverflow.com/questions/791 ... droid-java
1729839101
Anonymous
Я хочу загружать видео партиями по 20, чтобы мое приложение не зависало. Мое приложение загружает все видео одновременно, из-за чего оно тормозит или иногда выходит из строя. [code]public class AllVideosActivity extends AppCompatActivity { ActivityAllVideosBinding binding; ArrayList videoList; ListVideoAdapter adapter; String foldername; String folderPath; private static String AD_UNIT_BANNER = "ca-app-pub-3940256099942544/9214589741"; public static InterstitialAd interaddds; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); binding = ActivityAllVideosBinding.inflate(getLayoutInflater()); setContentView(binding.getRoot()); binding.foldertitle.setSelected(true); folderPath = getIntent().getStringExtra("folderPath"); videoList = new ArrayList(); ArrayUtil.videoItemArrayList = new ArrayList(); ArrayUtil.videoItemArrayList.addAll(videoList); adapter = new ListVideoAdapter(videoList, this, 1, new OnClickAdapter() { @Override public void onClick(int position) { Intent intent = new Intent(AllVideosActivity.this, VideoPlaingActivity.class); intent.putExtra("position", position); intent.putExtra("videotitle", videoList.get(position).getVideoName()); intent.putExtra("videopath", videoList.get(position).getVideoPath()); intent.putExtra("foldername", foldername); startActivity(intent); } }); listVideos(); binding.videolist.setLayoutManager(new LinearLayoutManager(this)); binding.videolist.setAdapter(adapter); foldername = getIntent().getStringExtra("folderName"); binding.foldertitle.setText(foldername); binding.back.setOnClickListener(v -> { onBackPressed(); }); } private void listVideos() { Uri uri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI; String[] projection = { MediaStore.Video.Media.TITLE, MediaStore.Video.Media.DATA, MediaStore.Video.Media.SIZE, MediaStore.Video.Media.DURATION, MediaStore.Video.Media.DATE_MODIFIED }; String selection = MediaStore.Video.Media.DATA + " like ?"; String[] selectionArgs = new String[]{"%" + folderPath + "%"}; String sortOrder = MediaStore.Video.Media.DATE_MODIFIED + " DESC"; Cursor cursor = getContentResolver().query(uri, projection, selection, selectionArgs, sortOrder); if (cursor != null) { while (cursor.moveToNext()) { String videoName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE)); String videoPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)); String videoDuration = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION)); long videoSize = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE)); long modifiedDateMillis = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATE_MODIFIED)) * 1000L; String formattedDate = new SimpleDateFormat(" dd MMM", Locale.getDefault()).format(modifiedDateMillis); VideoItem videoItem = new VideoItem(videoName, videoPath, videoDuration, videoSize, formattedDate, null); videoList.add(videoItem); ArrayUtil.videoItemArrayList.add(videoItem); } cursor.close(); } } @Override protected void attachBaseContext(Context newBase) { SharedPreferences sharedPreferences = newBase.getSharedPreferences("LanguagePrefs", Context.MODE_PRIVATE); String keylott = sharedPreferences.getString("keylot", "en"); super.attachBaseContext(LocaleHelper.setLocale(newBase, keylott)); } } [/code] В этом коде я получаю видео со своего телефона и показываю их в своем приложении. Я хочу сначала загрузить только 20 видео, а затем, если пользователь прокрутит вниз, следующие 20 видео должны быть загружены автоматически. Однако во время моего вызова все видео загружаются одновременно. Как загрузить только 20 видео одновременно? Подробнее здесь: [url]https://stackoverflow.com/questions/79124561/load-videos-in-batches-of-20-in-android-java[/url]