【发布时间】:2017-02-21 09:41:33
【问题描述】:
为什么它不起作用? 编辑:添加了新版本的代码和日志:
private void savePhotoFromCacheToFolder(Uri uri) {
File goodPhoto = album.setUpPhotoFile(); //new empty JPG
File currentPhoto = new File(uri.getPath()); //JPG from camera in cache
Log.v(TAG, "\ngoodPhoto Path " + goodPhoto);
Log.v(TAG, "\ncurrentPhoto Path " + currentPhoto);
FileInputStream source = null;
FileOutputStream destination = null;
try {
source = new FileInputStream(currentPhoto);
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.v(TAG, "\ncurrentPhoto not found ");
}
try {
destination = new FileOutputStream(goodPhoto);
} catch (FileNotFoundException e) {
e.printStackTrace();
Log.v(TAG, "\ngoodPhoto not found ");
}
FileChannel sourceFileChannel = source.getChannel();
FileChannel destinationFileChannel = destination.getChannel();
long size = 0;
try {
size = sourceFileChannel.size();
sourceFileChannel.transferTo(0, size, destinationFileChannel);
} catch (IOException e) {
e.printStackTrace();
Log.v(TAG, "\nshit happens ");
}
}
日志:
V/MainActivity: goodPhoto Path /storage/emulated/0/Pictures/Good photos/IMG_20170222_113700_-913025224.jpg
V/MainActivity: currentPhoto Path /cache/photo.jpg
V/MainActivity: currentPhoto not found
java.lang.NullPointerException: Attempt to invoke virtual method 'java.nio.channels.FileChannel java.io.FileInputStream.getChannel()' on a null object reference
看起来 Uri 不正确,但此 Uri 是由相机应用返回的。或者我可能无法访问缓存文件夹,但之前我确实使用这个 Uri 预览了照片。
【问题讨论】:
-
添加一些登录catch,你会看到发生了什么
-
捕获异常并忽略它是非常糟糕的。
-
@Selvin 我们需要知道什么?
-
在
catch中添加日志并记录异常(如果有)。 -
我不知道这是多么合法,但这是可行的
source = (FileInputStream) UriHelper.openInputStream(this, uri);