繁体   English   中英

askForStoragePermission 对 null object 参考

[英]askForStoragePermission on a null object reference

我想通过图像 url 点击下载图像。 但是当我单击下载按钮时,我在callback.askForStoragePermission();

这是我在适配器中下载图像的代码:

 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();
                }

这是在活动中:

 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);
    }
}

并在 IPPermissoncallback 文件中

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

}

我收到此错误:

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

我搜索了很多但找不到错误。 请帮忙

获得外部存储权限后,您还必须申请文件提供程序将文件存储在外部存储中

您必须执行以下步骤:

  1. 在您的活动中初始化您的IPermissionCallback

     IPermissionCallback iCallBack = new IPermissionCallback()........
  2. 现在将您的iCallBack传递给适配器的构造函数。

    例如,

     YourAdapter adapter = new YourAdapter(context, iCallBack);

现在在您的适配器 class 中,

IPermissionCallback iCallBack;

public class YourAdapter extends......

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

现在您可以在适配器 class 中使用iCallBack 当您使用该检查时,请检查 null 的安全性。 此外,当您的目标是 api >=24时,您必须在清单文件中注册FileProvider

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM