Страницы

Поиск по вопросам

вторник, 24 декабря 2019 г.

Добавить десять уникальных элементов

#java #android #list


Постараюсь преподнести вопрос корректно (открыт для замечаний/правок).

Начну пожалуй с начала. Есть кнопка по нажатию на которую открывается диалог. В диалоге
пользователь может вставить ссылку из vimeo и youtube.
После того, как ссылка вставлена в поле диалога и нажата кнопка "OK", в методе getIdUrl
вытаскивается id из ссылки, после чего добавляется сама картинка из видео(preview)
- пользователь(грубо говоря) видит как добавилась картинка из этого видео(следовательно
видео загружено).

На данный момент, приложение реализовано так, что пользователь может добавлять n-ое
кол-во видео(с одинаковыми ссылками), что само собой неприемлемо.

Задача заключается в поиске решения данной проблемы, а именно:


Добавить возможность для пользователя добавления не более 10 файлов.
Если ссылка повторяется(url видео), не добавлять его.


Отрывок диалога:

public void onClick(DialogInterface dialog, int which) {
            dialog.dismiss();
            Toast.makeText(getContext(), "ОК", Toast.LENGTH_SHORT).show();
            String string = input.getText().toString();
            getIdUrl(string, pos);
        }


И часть реализации метода getIdUrl для youtube:

void getIdUrl(String url, int position) {
    String video_id = "";
    String expression = "";
    if (url != null && url.trim().length() > 0 && url.matches(".*\\byoutube\\b.*")) {
        expression = "^.*((youtu.be" + "\\/)" + "|(v\\/)|(\\/u\\/w\\/)|(embed\\/)|(watch\\?))\\??v?=?([^#\\&\\?]*).*";

        CharSequence input = url;
        Pattern pattern = Pattern.compile(expression, Pattern.CASE_INSENSITIVE);
        Matcher matcher = pattern.matcher(input);
        if (matcher.matches()) {
            String groupIndex1 = matcher.group(7);
            if (groupIndex1 != null && groupIndex1.length() == 11)
                video_id = groupIndex1;
        }
        ImageUpload imageUpload = new ImageUpload();
        imageUpload.setLoadImage(true);
        OutputMetadata outputMetadata = new OutputMetadata();
        outputMetadata.setVideoUrl("http://img.youtube.com/vi/" + video_id + "/0.jpg");
        outputMetadata.setFilename("http://img.youtube.com/vi/" + video_id + "/0.jpg");
        imageUpload.setOutputMetadata(outputMetadata);
        controlList.get(position).getImageUploads().add(imageUpload);
        adapterForm.notifyDataSetChanged();


Дополнительно к разбору:
Модель VideoUpload

public class VideoUpload {

@SerializedName("id")
@Expose
private String id;
@SerializedName("videoUrl")
@Expose
String videoUrl;
@SerializedName("user_portrait_huge")
@Expose
private String userPortraitHuge;
@SerializedName("url")
@Expose
private String url;

public String getUserPortraitHuge() {
    return userPortraitHuge;
}


Прописаны все get'ры и set'ры.

Метод contains(во фрагменте)

    public boolean contains(VideoUpload newVideoUpload) {
    for (VideoUpload videoUpload : videoUploads) {
        if (videoUpload.getUrl().equals(newVideoUpload.getUrl()))
            return true;
    }
    return false;
}

    


Ответы

Ответ 1



Постановка задачи: По ссылке на видео с youtube.com или vimeo.com получить превью видео и отобразить его в списке на экране. При этом: Максимально можно добавить 10 видео; Не добавлять уже существующие видео. Превью можно добавить по трем типам ссылок: https://www.youtube.com/watch?v=XXXXXXXXXXX https://youtu.be/XXXXXXXXXXX https://vimeo.com/XXXXXXXXX Решение: Создаем activity_video_preview.xml:

Комментариев нет:

Отправить комментарий