0

i want to download image on click via image url. but when i click on download button i got this error on callback.askForStoragePermission();

this is my code to download image in adapter:

 Uri uri = Uri.parse("https://www.punjabidharti.com/wp-content/uploads/2021/04/auna-tere-dar-te-600x600.jpeg");
                if (callback != null && callback.checkSelfStoragePermission()) {
                    

                    DownloadManager downloadManager = (DownloadManager) mContext.getSystemService(Context.DOWNLOAD_SERVICE);
                    DownloadManager.Request request = new DownloadManager.Request(uri);
                    request.setAllowedNetworkTypes(DownloadManager.Request.NETWORK_WIFI |
                            DownloadManager.Request.NETWORK_MOBILE);
                    request.setTitle("Image Download");
                    request.setDescription("Nitnem With Audio App");

                    request.allowScanningByMediaScanner();
                    request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED);
                    request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "NitnemApp.jpg");
                    request.setMimeType("*/*");
                    downloadManager.enqueue(request);

                } else {
                    callback.askForStoragePermission();
                }

and this is in activity:

 adapter.setPermissionCallback(this);

}

@Override
public void askForStoragePermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(new String[]
                        {Manifest.permission.WRITE_EXTERNAL_STORAGE},
                DOWNLOAD_REQUEST_CODE);
    }
}

@Override
public Boolean checkSelfStoragePermission() {

    if(checkCallingOrSelfPermission(
            android.Manifest.permission.WRITE_EXTERNAL_STORAGE) ==
            PackageManager.PERMISSION_GRANTED){
        return true;
    }
    return false;
}


@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[]
        permissions, @NonNull int[] grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions,
            grantResults);

    if (requestCode == DOWNLOAD_REQUEST_CODE
            && grantResults[0] == PackageManager.PERMISSION_GRANTED){
        //permission granted update GridAdapter to do next task
        adapter.onPermissionResult(true);
    }else{
        //permission denied update GridAdapter to do next task
        adapter.onPermissionResult(false);
    }
}

and in IPPermissoncallback file

public interface IPermissionCallback{
void askForStoragePermission();
Boolean checkSelfStoragePermission();

}

i am getting this error:

void com.package.IPermissionCallback.askForStoragePermission()' on a null object reference

i have searched a lot but unable to find the error. please help

2 Answers2

0

after external storage permission, you have to also apply file provider for storing the file in external storage

axar
  • 539
  • 2
  • 17
0

You have to do following steps:

  1. Initialize your IPermissionCallback in your activity.

    IPermissionCallback iCallBack = new IPermissionCallback()........
    
  2. Now Pass your iCallBack to adapter's constructor.

    For e.g,

    YourAdapter adapter = new YourAdapter(context, iCallBack);
    

Now in your adapter class will be,

IPermissionCallback iCallBack;

public class YourAdapter extends......

YourAdapter(Context context, IPermissionCallback iCallBack){
  this.context = context;
  this.iCallBack = iCallBack;
}

Now you can use iCallBack in your adapter class. While you use that check null safety. Also while you are targeting api >=24 then you have to register FileProvider in your manifest file.