Q:

Converting a video to a GIF

I am trying to make my app to accept videos from the phone's library to be uploaded and converted into GIF format. My code is giving out this build error though:-
error: <anonymous com.example.bim.Video2gif$2> is not abstract and does not override abstract method onReschedule(String,ErrorInfo) in UploadCallback

and also this warning on my onActivityResult method:-
Overriding method should call super.onActivityResult

The code is as below : -
public class Video2gif extends AppCompatActivity {

    private Button uploadBtn;
    private ProgressBar progressBar;
    private int SELECT_VIDEO = 2;
    private ImageView img1;
    private DownloadManager downloadManager;
    private Button download_btn;
    private String gifUrl;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video2gif);
        MediaManager.init(this);

        progressBar = findViewById(R.id.progress_bar);
        MediaManager.init(this);
        img1 = findViewById(R.id.img1);
        uploadBtn = findViewById(R.id.uploadBtn);

        uploadBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                pickVideoFromGallery();

            }
            private void pickVideoFromGallery() {
                Intent GalleryIntent = new Intent();
                GalleryIntent.setType("video/*");
                GalleryIntent.setAction(Intent.ACTION_GET_CONTENT);
                startActivityForResult(Intent.createChooser(GalleryIntent,
                        "select video"), SELECT_VIDEO);
            }
        });
    }
    @Override
    protected void onActivityResult(int requestCode, int resultCode, final Intent data) {

        if (requestCode == SELECT_VIDEO && resultCode == RESULT_OK) {
            Uri selectedVideo = data.getData();
            MediaManager.get()
                    .upload(selectedVideo)
                    .unsigned("myid")
                    .option("resource_type", "video")
                    .callback(new UploadCallback(){
                        @Override
                        public void onStart(String requestId) {
                            progressBar.setVisibility(View.VISIBLE);
                            Toast.makeText(Video2gif.this,
                                    "Upload Started...", Toast.LENGTH_SHORT).show();
                        }

                        public void onProgress() {
                        }

                        public void onSuccess(String requestId, Map resultData) {

                            Toast.makeText(Video2gif.this, "Uploaded Succesfully",
                                    Toast.LENGTH_SHORT).show();
                            progressBar.setVisibility(View.GONE);
                            uploadBtn.setVisibility(View.INVISIBLE);

                            String publicId = resultData.get("public_id").toString();

                            gifUrl = MediaManager.get().url().resourceType("video")
                                    .transformation(new Transformation().videoSampling("25")
                                            .delay("200").height(200).effect("loop:10").crop("scale"))
                                    .resourceType("video").generate(publicId+".gif");

                            Glide.with(getApplicationContext()).asGif().load(gifUrl).into(img1);
                            download_btn.setVisibility(View.VISIBLE);

                        }
                        public void onError(String requestId, ErrorInfo error) {
                            Toast.makeText(Video2gif.this,
                                    "Upload Error", Toast.LENGTH_SHORT).show();
                            Log.v("ERROR!!", error.getDescription());
                        }

        });
    }
}

}

I am also using Cloudinary to help process the video to GIF. Any help would be appreciated, many thanks!

A:

When you’re using interfaces in android you need to include in your activity/fragment (override) the callback methods that they include. Also overriding some of the system methods requires you calling their super which means that many activities might be listening for the same callback when they inherit from one another. By adding the super in those callbacks you allow the result to travel through all of them. So in the case of the OnActivityResult just add the following line in your method:
super.onActivityResult(requestCode, resultCode, data);

For onReschedule you can let Android Studio generate that for you. Just go to Code->Generate-Override Methods and select the onReschedule

