我正在尝试将图像放在默认图像位置,并将文件名打印到TextView中。
当我尝试访问目录时,我总是在listFiles
上获得nullpointerexception。我已经尝试了几种方法来获取目录路径,但似乎没有任何工作。
我甚至在清单中设置了权限。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final String NEW_LINE = "\n";
final Button button = (Button) findViewById(R.id.renameImgBtn);
final TextView textView = (TextView) findViewById(R.id.textView);
textView.setMovementMethod(new ScrollingMovementMethod());
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
File camDir = new File("/sdcard/DCIM/"); // wtf is this supposed to be!?
textView.append(camDir.getAbsolutePath() + NEW_LINE);
if (camDir == null) {
textView.append("camDir is null" + NEW_LINE);
} else {
textView.append("camDir is not null" + NEW_LINE);
// get nullpointerexception on listFiles
File[] files = camDir.listFiles();
if (files == null) {
textView.append("files is null" + NEW_LINE);
} else {
for (final File file : files) {
textView.append(file.getName() + NEW_LINE);
}
}
}
}
});
}
我正在使用Nexus 6P,图像位于DCIM / Camera /。
下答案 0 :(得分:2)
首先,DCIM目录由DIRECTORY_DCIM定义,并应与Environment.getExternalStoragePublicDirectory()结合使用:
File camDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DCIM);
其次,当您使用Marshmallow设备时,如果您定位API 23,则必须request dangerous permissions at runtime - READ_EXTERNAL_STORAGE
是危险权限,并且属于这些规则。
答案 1 :(得分:0)
File camDir = new File("/sdcard0/DCIM/");
或
File camDir = new File("/sdcard1/DCIM/");
并检查文件是否为空并退出true。