[英]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
我搜索了很多但找不到错误。 请帮忙
获得外部存储权限后,您还必须申请文件提供程序将文件存储在外部存储中
您必须执行以下步骤:
在您的活动中初始化您的IPermissionCallback
。
IPermissionCallback iCallBack = new IPermissionCallback()........
现在将您的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.