所以我的应用程序有一个ActionDialog
包含空白画布作为界面的简单取消和保存按钮。正在发生的事情最好用一个简短的插图来说明
之前的画面布局
-(TextView)-(ImageView)-(Button)-
然后,当用户按下按钮时,会ActionDialog
弹出请求他们签名的窗口。一旦他们签名,捕获的图纸就会保存下来。然后通过内存访问绘图并将其放置在ImageView
带有bitmap
. 然而,这就是最终发生的事情
之后的屏幕布局
- - - - - 没有什么 - - - - - - -
他们只是消失了,我的错误logcat
:
05-14 19:06:27.004: E/Error(25274): java.io.FileNotFoundException: /storage/emulated/0signature.png: open failed: EACCES (Permission denied)
05-14 19:06:27.004: E/BitmapFactory(25274): Unable to decode stream: java.io.FileNotFoundException: /storage/emulated/0signature.png: open failed: ENOENT (No such file or directory)
java.io.FileNotFoundException:/storage/emulated/0signature.png:打开失败:ENOENT(没有这样的文件或目录)
虽然它不会使我的程序崩溃。无论如何,这里是文件的代码
动作对话框
public class CaptureSignature extends DialogFragment {
Sign sign;
View view;
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder capSig = new AlertDialog.Builder(getActivity());
capSig.setView(sign = new Sign(this.getActivity(), null))
.setMessage(R.string.store_question)
.setPositiveButton(R.string.save,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
try {
sign.setDrawingCacheEnabled(true);
sign.getDrawingCache()
.compress(
Bitmap.CompressFormat.PNG,
10,
new FileOutputStream(
new File(
getActivity()
.getExternalFilesDir(
"img"),
"signature.png")));
} catch (Exception e) {
Log.e("Error ", e.toString());
}
File mysig = new File(getActivity()
.getExternalFilesDir("img"),
"signature.png");
ImageView sig = (ImageView) getActivity()
.findViewById(R.id.sig_image);
Bitmap bmp = BitmapFactory.decodeFile(mysig
.getAbsolutePath());
sig.setImageBitmap(bmp);
}
})
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
// Create the Dialog object and return it
return capSig.create();
}
}
所以很明显我在某个地方搞砸了。如果有人有任何见解,我将不胜感激。谢谢!
我个人认为我要么保存了这个错误,要么我没有正确声明 Sign,正如我所说的那样,但我没有给它一个值,所以drawing cache
实际上并没有被访问。
编辑
我已经在Manifest
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
第二次编辑
显示新代码和logcat,错误已更改
最终编辑
非常感谢 Matt Giles 和 JRowan,这让我发疯了。它现在可以工作了,上面的代码是最终版本。