簡體   English   中英

無法在 onBindViewHolder 中的 Recycler View adater 中強制轉換為 Model

[英]Cannot be cast to Model in Recycler View adater in onBindViewHolder

在我的recyclerview適配器中,我有兩種視圖類型native ad view type和菜單項,在我下面的適配器中,我收到以下錯誤。

java.lang.ClassCastException: java.util.ArrayList cannot be cast to Model.VideoListModel at Adapter.MainListAdapter.onBindViewHolder(MainListAdapter.java:95)

95行是final VideoListModel folderVideoModel = (VideoListModel) arrayList.get(position);

這是我的 recyclerView 適配器

public class MainListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int MENU_ITEM_VIEW_TYPE = 0;
    private static final int UNIFIED_NATIVE_AD_VIEW_TYPE = 1;

    private final Context mContext;
    private final ArrayList<Object> arrayList;

    public MainListAdapter(Context context, ArrayList<Object> arrayList) {
        this.mContext = context;
        this.arrayList = arrayList;
    }

    public static class MainAdapterViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        TextView duration;
        Chip size;
        RelativeLayout path;
        ImageView thumbnail;

        public MainAdapterViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.title);
            duration = itemView.findViewById(R.id.duration);
            size = itemView.findViewById(R.id.file_size);
            path = itemView.findViewById(R.id.item_path);
            thumbnail = itemView.findViewById(R.id.thumbnail);
        }
    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }

    @Override
    public int getItemViewType(int position) {
        Object recyclerViewItem = arrayList.get(position);
        if (recyclerViewItem instanceof UnifiedNativeAd) {
            return UNIFIED_NATIVE_AD_VIEW_TYPE;
        }
        return MENU_ITEM_VIEW_TYPE;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                View unifiedNativeLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ad_unified, viewGroup, false);
                return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
            case MENU_ITEM_VIEW_TYPE:
            default:
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_video_list, viewGroup, false);
                return new MainAdapterViewHolder(view);
        }
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
        int viewType = getItemViewType(position);
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                UnifiedNativeAd nativeAd = (UnifiedNativeAd) arrayList.get(position);
                populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
                break;
            case MENU_ITEM_VIEW_TYPE:
            default:
                final MainAdapterViewHolder mainAdapterViewHolder = (MainAdapterViewHolder) holder;
                final VideoListModel folderVideoModel = (VideoListModel) arrayList.get(position);
                    mainAdapterViewHolder.title.setText("" + folderVideoModel.getPath());
                    mainAdapterViewHolder.thumbnail.setImageResource(R.drawable.ic_folder);
                    break;
        }
    }

主要活動

public class MainActivity extends AppCompatActivity {

private final ArrayList<NormalFile> list = new ArrayList<>();
private final List<VideoListModel> models = new ArrayList<>();
private final Map<String, VideoListModel> files = new HashMap<>();

private DbHelper db;
MainListAdapter adapter;

private final FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
List<Object> arrayListVideos = new ArrayList<>();
List<UnifiedNativeAd> nativeAds = new ArrayList<>();

public static final int NUMBER_OF_ADS = 1;
AdLoader adLoader;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    db = Constants.getDbHelper(this);
    loadVideos();

    RecyclerView recyclerView = findViewById(R.id.main_recycler_view);
    recyclerView.setLayoutManager(new LinearLayoutManager(this));
    adapter = new MainListAdapter(this, arrayListVideos);
    recyclerView.setAdapter(adapter);
}

private void loadVideos() {
    FileFilter.getFiles(this, new FilterResultCallback<NormalFile>() {
        @Override
        public void onResult(List<Directory<NormalFile>> directories) {
            for (Directory<NormalFile> directory : directories) {
                list.addAll(directory.getFiles());
                for (int i = 0; i < directory.getFiles().size(); i++) {
                    File f = new File(directory.getFiles().get(i).getPath());

                    String parent = Objects.requireNonNull(f.getParent()).substring(f.getParent().lastIndexOf("/") + 1);
                    if (parent.equals("0")) {
                        VideoListModel vlm = new VideoListModel();
                        vlm.setFolder(false);
                        vlm.setFile(f);
                        vlm.setPath(f.getPath());
                        vlm.setDuration("");
                        models.add(vlm);
                    } else {
                        if (files.containsKey(parent)) {
                            VideoListModel vlm = files.get(parent);
                            assert vlm != null;
                            vlm.getFiles().add(f);
                            vlm.setPath(f.getParent());
                        } else {
                            VideoListModel vlm = new VideoListModel();
                            vlm.setFolder(true);
                            vlm.setFolderName(parent);
                            vlm.setPath(f.getParent());
                            List<File> fileList = new ArrayList<>();
                            fileList.add(f);
                            vlm.setFiles(fileList);
                            files.put(parent, vlm);
                        }
                    }
                }
            }
            models.addAll(files.values());
            arrayListVideos.add(models);
            for (int i = 0; i < models.size(); i++) {
                Log.d("TAG", "onResult: "+ models.get(i).getPath() + " 2 " + models.get(i).isFolder());
            }
            adapter.notifyDataSetChanged();
            //sortByName();

            new ThumbnailLoader().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
            new TimeAndSizeLoader().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
            getSupportLoaderManager().destroyLoader(3);
        }
    }, new String[]{"mp4", "mov", "wmv", "avi", "avchd", "webm", "m4v", "mkv", "3gp", "3g2", "flv", "m3u8"});
}

@SuppressLint("StaticFieldLeak")
private class TimeAndSizeLoader extends AsyncTask<Void, Integer, Void> {
    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        adapter.notifyItemChanged(values[0]);
    }

    @Override
    protected Void doInBackground(Void... voids) {
        for (int i = 0; i < models.size(); i++) {
            if(models.get(i).getFile() != null){
                FileStore fs = db.getFileByName(models.get(i).getFile().getName());
                VideoListModel vlm = models.get(i);
                if (fs != null) {
                    if(fs.getDuration() != null){ // for file
                        vlm.setDuration(fs.getDuration());
                    }else {
                        fs.setDuration(Constants.getDuration(vlm.getFile().getPath()));
                        vlm.setDuration(fs.getDuration());
                        db.insertOrUpdateFile(fs);
                    }
                }else {
                    vlm.setDuration(Constants.getDuration(vlm.getFile().getPath()));
                    FileStore fss = new FileStore();
                    fss.setName(vlm.getFile().getName());
                    fss.setParent(vlm.getFile().getParent());
                    fss.setUpdatedAt(new Date());
                    db.insertOrUpdateFile(fss);
                    models.set(i, vlm);
                }
                publishProgress(i);
            }
        }
        Log.e("size", db.getFiles().size() + "");
        return null;
    }
}

@SuppressLint("StaticFieldLeak")
private class ThumbnailLoader extends AsyncTask<Void, Integer, Void> {
    @Override
    protected void onPostExecute(Void aVoid) {
        super.onPostExecute(aVoid);
        adapter.notifyDataSetChanged();
    }

    @Override
    protected void onProgressUpdate(Integer... values) {
        super.onProgressUpdate(values);
        adapter.notifyDataSetChanged();
    }

    @Override
    protected Void doInBackground(Void... voids) {
        for (int i = 0; i < models.size(); i++) {
            if(models.get(i).getFile() != null){
                FileStore fs = db.getFileByName(models.get(i).getFile().getName());
                VideoListModel vlm = models.get(i);
                if (fs != null) {
                    if(fs.getBitmap() != null){
                        vlm.setBitmap(BitmapFactory.decodeByteArray(fs.getBitmap(), 0, fs.getBitmap().length));
                        vlm.setWidth(fs.getWidth());
                        vlm.setHeight(fs.getHeight());
                    }else {
                        mmr.setDataSource(models.get(i).getFile().getPath());
                        Bitmap bmp = mmr.getFrameAtTime((Long.parseLong(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION)) / 2) * 1000, OPTION_CLOSEST_SYNC);
                        bmp = Constants.resize(bmp, 512, 512);
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                        byte[] byteArray = stream.toByteArray();
                        vlm.setBitmap(bmp);
                        fs.setBitmap(byteArray);
                        fs.setWidth(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)));
                        fs.setHeight(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)));
                        vlm.setWidth(fs.getWidth());
                        vlm.setHeight(fs.getHeight());
                        db.insertOrUpdateFile(fs);
                    }
                }else {
                    try {
                        mmr.setDataSource(models.get(i).getFile().getPath());
                        Log.e("time", mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION));
                        //vlm.setDuration(Constants.getDurationByLong(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION)));
                        //models.set(i, vlm);
                        //publishProgress(i);
                        Bitmap bmp = mmr.getFrameAtTime((Long.parseLong(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION)) / 2) * 1000, OPTION_CLOSEST_SYNC);
                        bmp = Constants.resize(bmp, 512, 512);
                        ByteArrayOutputStream stream = new ByteArrayOutputStream();
                        bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                        byte[] byteArray = stream.toByteArray();
                        vlm.setBitmap(bmp);
                        FileStore fss = new FileStore();
                        fss.setName(vlm.getFile().getName());
                        fss.setParent(vlm.getFile().getParent());
                        fss.setBitmap(byteArray);
                        fss.setWidth(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)));
                        fss.setHeight(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)));
                        fss.setUpdatedAt(new Date());
                        vlm.setWidth(fss.getWidth());
                        vlm.setHeight(fss.getHeight());
                        db.insertOrUpdateFile(fss);
                        models.set(i, vlm);
                    }catch (Exception ignored){                        }
                }
                publishProgress(i);
            }
        }
        Log.e("db", db.getFiles().size() + "");
        return null;
    }
}

private void loadNativeAds() {
    AdLoader.Builder builder = new AdLoader.Builder(this,getResources().getString(R.string.native_ad_id));

    adLoader = builder.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
        @Override
        public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
            nativeAds.add(unifiedNativeAd);
            if (!adLoader.isLoading()) {
                insertAdsInMenuItem();
            }
        }
    }).withAdListener(new AdListener() {
        @Override
        public void onAdFailedToLoad(int i) {
            super.onAdFailedToLoad(i);
            if (!adLoader.isLoading()) {
                insertAdsInMenuItem();
            }
        }
    }).build();
    adLoader.loadAds(new AdRequest.Builder().build(),NUMBER_OF_ADS);
}

private void insertAdsInMenuItem() {
    if (nativeAds.size() < 0 ){
        return;
    }
    int offset = (models.size() / nativeAds.size() + 1 );
    int index = 0;
    for (UnifiedNativeAd ad:nativeAds){

        arrayListVideos.add(index, ad);
        index = index + offset;
    }
}
}


}

視頻列表模型

公共 class VideoListModel { 私有 boolean 文件夾; 私有 int 文件計數; 私有 int 寬度; 私人 int 高度; 私有字符串文件夾名稱; 私有字符串持續時間; 私有字符串路徑; 私有文件文件; 私人 Bitmap bitmap; 私有列表文件;

public int getWidth() {
    return width;
}

public void setWidth(int width) {
    this.width = width;
}

public int getHeight() {
    return height;
}

public void setHeight(int height) {
    this.height = height;
}

public String getPath() {
    return path;
}

public void setPath(String path) {
    this.path = path;
}

public Bitmap getBitmap() {
    return bitmap;
}

public void setBitmap(Bitmap bitmap) {
    this.bitmap = bitmap;
}

public String getDuration() {
    return duration;
}

public void setDuration(String duration) {
    this.duration = duration;
}

public boolean isFolder() {
    return folder;
}

public void setFolder(boolean folder) {
    this.folder = folder;
}

public int getFileCount() {
    return fileCount;
}

public void setFileCount(int fileCount) {
    this.fileCount = fileCount;
}

public String getFolderName() {
    return folderName;
}

public void setFolderName(String folderName) {
    this.folderName = folderName;
}

public File getFile() {
    return file;
}

public void setFile(File file) {
    this.file = file;
}

public List<File> getFiles() {
    return files;
}

public void setFiles(List<File> files) {
    this.files = files;
}

}

我添加了Model但我仍然收到錯誤。 那我犯了什么錯誤?

public class MainListSuperClass {
}

創建 class MyUnifiedNativeAd:

public class MyUnifiedNativeAd extends  MainListSuperClass{
    private UnifiedNativeAd mUnifiedNativeAd;

    public MyUnifiedNativeAd(UnifiedNativeAd unifiedNativeAd) {
        mUnifiedNativeAd = unifiedNativeAd;
    }

    public UnifiedNativeAd getUnifiedNativeAd() {
        return mUnifiedNativeAd;
    }

    public void setUnifiedNativeAd(UnifiedNativeAd unifiedNativeAd) {
        mUnifiedNativeAd = unifiedNativeAd;
    }
}

從 MainListSuperClass 擴展 VideoListModel:

public class VideoListModel extends MainListSuperClass{
...
}

適配器代碼:

public class MainListAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int MENU_ITEM_VIEW_TYPE = 0;
    private static final int UNIFIED_NATIVE_AD_VIEW_TYPE = 1;

    private final Context mContext;
    private final ArrayList<MainListSuperClass> arrayList;

    public MainListAdapter(Context context, ArrayList<MainListSuperClass> arrayList) {
        this.mContext = context;
        this.arrayList = arrayList;
    }

    public static class MainAdapterViewHolder extends RecyclerView.ViewHolder {
        TextView title;
        TextView duration;
        Chip size;
        RelativeLayout path;
        ImageView thumbnail;

        public MainAdapterViewHolder(@NonNull View itemView) {
            super(itemView);
            title = itemView.findViewById(R.id.title);
            duration = itemView.findViewById(R.id.duration);
            size = itemView.findViewById(R.id.file_size);
            path = itemView.findViewById(R.id.item_path);
            thumbnail = itemView.findViewById(R.id.thumbnail);
        }
    }

    @Override
    public int getItemCount() {
        return arrayList.size();
    }

    @Override
    public int getItemViewType(int position) {
        MainListSuperClass recyclerViewItem = arrayList.get(position);
        if (recyclerViewItem instanceof MyUnifiedNativeAd) {
            return UNIFIED_NATIVE_AD_VIEW_TYPE;
        }
        return MENU_ITEM_VIEW_TYPE;
    }

    @NonNull
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int viewType) {
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                View unifiedNativeLayoutView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.ad_unified, viewGroup, false);
                return new UnifiedNativeAdViewHolder(unifiedNativeLayoutView);
            case MENU_ITEM_VIEW_TYPE:
            default:
                View view = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item_video_list, viewGroup, false);
                return new MainAdapterViewHolder(view);
        }
    }

    @SuppressLint("SetTextI18n")
    @Override
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, final int position) {
        int viewType = getItemViewType(position);
        switch (viewType) {
            case UNIFIED_NATIVE_AD_VIEW_TYPE:
                UnifiedNativeAd nativeAd = ((MyUnifiedNativeAd) arrayList.get(position)).getUnifiedNativeAd();
                populateNativeAdView(nativeAd, ((UnifiedNativeAdViewHolder) holder).getAdView());
                break;
            case MENU_ITEM_VIEW_TYPE:
            default:
                final MainAdapterViewHolder mainAdapterViewHolder = (MainAdapterViewHolder) holder;
                final VideoListModel folderVideoModel = (VideoListModel) arrayList.get(position);
                mainAdapterViewHolder.title.setText("" + folderVideoModel.getPath());
                mainAdapterViewHolder.thumbnail.setImageResource(R.drawable.ic_folder);
                break;
        }
    }

活動代碼:

public class MainActivity extends AppCompatActivity {

    private final ArrayList<NormalFile> list = new ArrayList<>();
    private final Map<String, VideoListModel> files = new HashMap<>();

    private DbHelper db;
    MainListAdapter adapter;

    private final FFmpegMediaMetadataRetriever mmr = new FFmpegMediaMetadataRetriever();
    List<MainListSuperClass> arrayListVideos = new ArrayList<>();
    List<MyUnifiedNativeAd> nativeAds = new ArrayList<>();

    public static final int NUMBER_OF_ADS = 1;
    AdLoader adLoader;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        db = Constants.getDbHelper(this);
        loadVideos();

        RecyclerView recyclerView = findViewById(R.id.main_recycler_view);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new MainListAdapter(this, arrayListVideos);
        recyclerView.setAdapter(adapter);
    }

    private void loadVideos() {
        FileFilter.getFiles(this, new FilterResultCallback<NormalFile>() {
            @Override
            public void onResult(List<Directory<NormalFile>> directories) {
                for (Directory<NormalFile> directory : directories) {
                    list.addAll(directory.getFiles());
                    for (int i = 0; i < directory.getFiles().size(); i++) {
                        File f = new File(directory.getFiles().get(i).getPath());

                        String parent = Objects.requireNonNull(f.getParent()).substring(f.getParent().lastIndexOf("/") + 1);
                        if (parent.equals("0")) {
                            VideoListModel vlm = new VideoListModel();
                            vlm.setFolder(false);
                            vlm.setFile(f);
                            vlm.setPath(f.getPath());
                            vlm.setDuration("");
                            arrayListVideos.add(vlm);
                        } else {
                            if (files.containsKey(parent)) {
                                VideoListModel vlm = files.get(parent);
                                assert vlm != null;
                                vlm.getFiles().add(f);
                                vlm.setPath(f.getParent());
                            } else {
                                VideoListModel vlm = new VideoListModel();
                                vlm.setFolder(true);
                                vlm.setFolderName(parent);
                                vlm.setPath(f.getParent());
                                List<File> fileList = new ArrayList<>();
                                fileList.add(f);
                                vlm.setFiles(fileList);
                                files.put(parent, vlm);
                            }
                        }
                    }
                }
                arrayListVideos.addAll(files.values());
                
                for (int i = 0; i < arrayListVideos.size(); i++) {
                    Log.d("TAG", "onResult: "+ arrayListVideos.get(i).getPath() + " 2 " + arrayListVideos.get(i).isFolder());
                }
                adapter.notifyDataSetChanged();
                //sortByName();

                new ThumbnailLoader().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
                new TimeAndSizeLoader().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
                getSupportLoaderManager().destroyLoader(3);
            }
        }, new String[]{"mp4", "mov", "wmv", "avi", "avchd", "webm", "m4v", "mkv", "3gp", "3g2", "flv", "m3u8"});
    }

    @SuppressLint("StaticFieldLeak")
    private class TimeAndSizeLoader extends AsyncTask<Void, Integer, Void> {
        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            adapter.notifyItemChanged(values[0]);
        }

        @Override
        protected Void doInBackground(Void... voids) {
            for (int i = 0; i < arrayListVideos.size(); i++) {
                if(arrayListVideos.get(i).getFile() != null){
                    FileStore fs = db.getFileByName(arrayListVideos.get(i).getFile().getName());
                    VideoListModel vlm = arrayListVideos.get(i);
                    if (fs != null) {
                        if(fs.getDuration() != null){ // for file
                            vlm.setDuration(fs.getDuration());
                        }else {
                            fs.setDuration(Constants.getDuration(vlm.getFile().getPath()));
                            vlm.setDuration(fs.getDuration());
                            db.insertOrUpdateFile(fs);
                        }
                    }else {
                        vlm.setDuration(Constants.getDuration(vlm.getFile().getPath()));
                        FileStore fss = new FileStore();
                        fss.setName(vlm.getFile().getName());
                        fss.setParent(vlm.getFile().getParent());
                        fss.setUpdatedAt(new Date());
                        db.insertOrUpdateFile(fss);
                        arrayListVideos.set(i, vlm);
                    }
                    publishProgress(i);
                }
            }
            Log.e("size", db.getFiles().size() + "");
            return null;
        }
    }

    @SuppressLint("StaticFieldLeak")
    private class ThumbnailLoader extends AsyncTask<Void, Integer, Void> {
        @Override
        protected void onPostExecute(Void aVoid) {
            super.onPostExecute(aVoid);
            adapter.notifyDataSetChanged();
        }

        @Override
        protected void onProgressUpdate(Integer... values) {
            super.onProgressUpdate(values);
            adapter.notifyDataSetChanged();
        }

        @Override
        protected Void doInBackground(Void... voids) {
            for (int i = 0; i < arrayListVideos.size(); i++) {
                if(arrayListVideos.get(i).getFile() != null){
                    FileStore fs = db.getFileByName(arrayListVideos.get(i).getFile().getName());
                    VideoListModel vlm = arrayListVideos.get(i);
                    if (fs != null) {
                        if(fs.getBitmap() != null){
                            vlm.setBitmap(BitmapFactory.decodeByteArray(fs.getBitmap(), 0, fs.getBitmap().length));
                            vlm.setWidth(fs.getWidth());
                            vlm.setHeight(fs.getHeight());
                        }else {
                            mmr.setDataSource(arrayListVideos.get(i).getFile().getPath());
                            Bitmap bmp = mmr.getFrameAtTime((Long.parseLong(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION)) / 2) * 1000, OPTION_CLOSEST_SYNC);
                            bmp = Constants.resize(bmp, 512, 512);
                            ByteArrayOutputStream stream = new ByteArrayOutputStream();
                            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                            byte[] byteArray = stream.toByteArray();
                            vlm.setBitmap(bmp);
                            fs.setBitmap(byteArray);
                            fs.setWidth(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)));
                            fs.setHeight(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)));
                            vlm.setWidth(fs.getWidth());
                            vlm.setHeight(fs.getHeight());
                            db.insertOrUpdateFile(fs);
                        }
                    }else {
                        try {
                            mmr.setDataSource(arrayListVideos.get(i).getFile().getPath());
                            Log.e("time", mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION));
                            //vlm.setDuration(Constants.getDurationByLong(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION)));
                            //arrayListVideos.set(i, vlm);
                            //publishProgress(i);
                            Bitmap bmp = mmr.getFrameAtTime((Long.parseLong(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_DURATION)) / 2) * 1000, OPTION_CLOSEST_SYNC);
                            bmp = Constants.resize(bmp, 512, 512);
                            ByteArrayOutputStream stream = new ByteArrayOutputStream();
                            bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
                            byte[] byteArray = stream.toByteArray();
                            vlm.setBitmap(bmp);
                            FileStore fss = new FileStore();
                            fss.setName(vlm.getFile().getName());
                            fss.setParent(vlm.getFile().getParent());
                            fss.setBitmap(byteArray);
                            fss.setWidth(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_WIDTH)));
                            fss.setHeight(Integer.parseInt(mmr.extractMetadata(FFmpegMediaMetadataRetriever.METADATA_KEY_VIDEO_HEIGHT)));
                            fss.setUpdatedAt(new Date());
                            vlm.setWidth(fss.getWidth());
                            vlm.setHeight(fss.getHeight());
                            db.insertOrUpdateFile(fss);
                            arrayListVideos.set(i, vlm);
                        }catch (Exception ignored){                        }
                    }
                    publishProgress(i);
                }
            }
            Log.e("db", db.getFiles().size() + "");
            return null;
        }
    }

    private void loadNativeAds() {
        AdLoader.Builder builder = new AdLoader.Builder(this,getResources().getString(R.string.native_ad_id));

        adLoader = builder.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
            @Override
            public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
                nativeAds.add((new MyUnifiedNativeAd(unifiedNativeAd));
                if (!adLoader.isLoading()) {
                    insertAdsInMenuItem();
                }
            }
        }).withAdListener(new AdListener() {
            @Override
            public void onAdFailedToLoad(int i) {
                super.onAdFailedToLoad(i);
                if (!adLoader.isLoading()) {
                    insertAdsInMenuItem();
                }
            }
        }).build();
        adLoader.loadAds(new AdRequest.Builder().build(),NUMBER_OF_ADS);
    }

    private void insertAdsInMenuItem() {
        if (nativeAds.size() < 0 ){
            return;
        }
        int offset = (arrayListVideos.size() / nativeAds.size() + 1 );
        int index = 0;
        for (MyUnifiedNativeAd ad:nativeAds){

            arrayListVideos.add(index, ad);
            index = index + offset;
        }
    }
}


}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM