I wrote a method that, depending on the selected link (youtube / vimeo / ...), will allow us to insert a picture from this video into the preview. But at this stage it turned out a bit cumbersome, I would like to reduce, maybe something should be taken out to a special class, I will be glad to any remarks. Program Code:

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; } controlList.get(position).getImageUploads().get(0).setLoadImage(true); controlList.get(position).getImageUploads().get(0).getOutputMetadata().setVideoUrl("http://img.youtube.com/vi/" + video_id + "/0.jpg"); controlList.get(position).getImageUploads().get(0).getOutputMetadata().setFilename("http://img.youtube.com/vi/" + video_id + "/0.jpg"); adapterForm.notifyDataSetChanged(); } else if (url.matches(".*\\bvimeo\\b.*")) { expression = "/vimeo.com/([^_]+)/?"; Pattern compiledPattern = Pattern.compile(expression); Matcher matcher = compiledPattern.matcher(url); if (matcher.find()) { String match = matcher.group(); String tem = match.substring(match.lastIndexOf("/") + 1); System.out.println("ID : " + match.substring(match.lastIndexOf("/") + 1)); uploadVideo(position,tem); } } else if(url.matches(".*\\bplay\\b.*")) { expression = "/play.md/([^_]+)/?"; Pattern compiledPattern = Pattern.compile(expression); Matcher matcher = compiledPattern.matcher(url); if (matcher.find()) { String match = matcher.group(); String tem = match.substring(match.lastIndexOf("/") + 1); System.out.println("ID : " + match.substring(match.lastIndexOf("/") + 1)); controlList.get(position).getImageUploads().get(0).setLoadImage(true); controlList.get(position).getImageUploads().get(0).getOutputMetadata().setVideoUrl("https://play.md/"+tem+"/thumbnail"); controlList.get(position).getImageUploads().get(0).getOutputMetadata().setFilename("https://play.md/"+tem+"/thumbnail"); adapterForm.notifyDataSetChanged(); } } } 

For vimeo, use retrofit:

 private void uploadVideo(final int pos,String idVideo) { RestAdapter adapter = new RestAdapter.Builder() .setEndpoint("https://vimeo.com/api/v2") .setLogLevel(RestAdapter.LogLevel.FULL) .build(); API service = adapter.create(API.class); service.uploadVideo(idVideo, new Callback<ArrayList<VideoUpload>>() { @Override public void success(ArrayList<VideoUpload> videoUpload, Response response) { controlList.get(pos).getImageUploads().get(0).setLoadImage(true); controlList.get(pos).getImageUploads().get(0).getOutputMetadata().setVideoUrl(videoUpload.get(0).getUserPortraitHuge()); controlList.get(pos).getImageUploads().get(0).getOutputMetadata().setFilename(videoUpload.get(0).getUserPortraitHuge()); adapterForm.notifyDataSetChanged(); Log.d("succes", "sisisihjdf"); } @Override public void failure(RetrofitError error) { Log.d("errlor", error.getMessage().toString()); } }); } 
  • url.trim().length() > 0 && url.matches(".*\\byoutube\\b.*") left expression is superfluous, because if the length is 0, then the right expression will not work. - Senior Pomidor
  • 2
    controlList.get(position).getImageUploads().get(0). Called 6 times, you can call once, remember the Object and use this object - Senior Pomidor
  • You can make a decomposition through the pattern . In any case, do not leave such a sheet of code. - Roxio0

0