这个一般是内存没有读到,导致读不了SD卡的内容,也无法写进去。
图片文字都是不行的。
一个治标不治本的方法
参考:https://blog.csdn.net/tangbin0505/article/details/93339111?utm_medium=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromMachineLearnPai2-2.nonecase
加入前半句不为空的判断,因为是空的话求leng直接会报错
if(array != null && array.leng != 0)
{
//数据不为空数据的判断。
}
但是这个方法不好,本质上只是不报错了,写和读还是没有成功。
我们需要加入读写权限
参考:https://blog.csdn.net/whuzhang16/article/details/73302167/
在Android中,涉及到读写SD卡上的文件时,有时会出现java.lang.NullPointerException: Attempt to get length of null array错误。这种现象很有可能是因为在清单文件AndroidManifest.xml文件中没有添加读写SD卡的权限。加上这两句就可以了。
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEM"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
但是在我这里还是不行
还得写用动态申请的方法
方法一:
写个checkPermission直接调用
checkPermission(Login.this);
private void checkPermission(Activity activity) {//开启本地的照片读取与写入权限
// Storage Permissions
final int REQUEST_EXTERNAL_STORAGE = 1;
String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,//读内存权限
Manifest.permission.WRITE_EXTERNAL_STORAGE};//写内存权限
try {
//检测是否有写的权限
int permission = ActivityCompat.checkSelfPermission(Login.this,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 没有写的权限,去申请写的权限,会弹出对话框
ActivityCompat.requestPermissions(Login.this, PERMISSIONS_STORAGE, REQUEST_EXTERNAL_STORAGE);
}
if(ContextCompat.checkSelfPermission(Login.this, Manifest.permission.CALL_PHONE)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(Login.this,new String[]{Manifest.permission.CALL_PHONE},1);
}
} catch (Exception e) {
e.printStackTrace();
}
}
方法二:
动态直接申请,这里的WRITE_EXTERNAL_STORAGE、READ_EXTERNAL_STORAGE这些权限名字可以去查官方的权限表格得到。
if(ContextCompat.checkSelfPermission(Login.this, Manifest.permission.WRITE_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(Login.this,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
}
if(ContextCompat.checkSelfPermission(Login.this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
ActivityCompat.requestPermissions(Login.this,new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
然后发现还是不行,原因是安卓10和安卓9有区别
参考:https://blog.csdn.net/u013718730/article/details/104693746/
Android10对权限的管理更加严格了,主要有以下两点
权限按单个分配,不再按组分配,以前申请了读存储卡权限,即可获得同组的写权限,现在需要逐个申请
存储卡读写权限需要在Application的Manifest清单中声明加入下面这句话
<application
android:requestLegacyExternalStorage="true">
</application>
之后在安卓10手机就不会出现闪退情况了。