我想将图像保存到 sd 卡中。但是在 sd 卡中仅创建了命名图像文件的文件夹,但未在 sd 卡中创建实际文件。尝试保存该图像时出现空指针异常到 SD 卡。这是代码:
public class MainActivity extends Activity {
ImageView bmImage;
LinearLayout view1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view1 = (LinearLayout)findViewById(R.id.certlinear);
bmImage = (ImageView)findViewById(R.id.certimage);
Button button =(Button)findViewById(R.id.btn);
button.setOnClickListener(hello);
}
Button.OnClickListener hello= new Button.OnClickListener()
{
@Override
public void onClick(View v)
{
View view = view1.getRootView();
//u can use any view of your View instead of TextView
if(view!=null)
{
System.out.println("view is not null.....");
view.setDrawingCacheEnabled(true);
view.buildDrawingCache();
Bitmap bm = view.getDrawingCache();
try
{
if(bm!=null)
{
System.out.println("bm is not null.....");
OutputStream fos = null;
File folder = new File(Environment.getExternalStorageDirectory().toString() + "/sample.JPEG");
boolean success = false;
if (!folder.exists()) {
success = folder.mkdirs();
}
if (!success) {
// Do something on success
} else {
// Do something else on failure
}
Toast.makeText(MainActivity.this,"path of the folder is "+folder.getAbsolutePath(), Toast.LENGTH_SHORT).show();
fos = new FileOutputStream(folder);
BufferedOutputStream bos = new BufferedOutputStream(fos);
bm.compress(Bitmap.CompressFormat.JPEG, 50, bos);
bos.flush();
bos.close();
view.setDrawingCacheEnabled(false);
}
}
catch(Exception e)
{
System.out.println("Error="+e);
e.printStackTrace();
}
}
}
};
}
这是异常日志:
09-13 18:44:18.957: W/System.err(3612): java.io.FileNotFoundException: /sdcard/sample.JPEG
09-13 18:44:18.967: W/System.err(3612): at org.apache.harmony.luni.platform.OSFileSystem.open(OSFileSystem.java:244)
09-13 18:44:18.967: W/System.err(3612): at java.io.FileOutputStream.<init>(FileOutputStream.java:97)
09-13 18:44:18.967: W/System.err(3612): at java.io.FileOutputStream.<init>(FileOutputStream.java:69)
09-13 18:44:18.976: W/System.err(3612): at com.example.mytest.MainActivity$1.onClick(MainActivity.java:96)
09-13 18:44:18.976: W/System.err(3612): at android.view.View.performClick(View.java:2364)
09-13 18:44:18.976: W/System.err(3612): at android.view.View.onTouchEvent(View.java:4179)
09-13 18:44:18.976: W/System.err(3612): at android.widget.TextView.onTouchEvent(TextView.java:6541)
09-13 18:44:18.976: W/System.err(3612): at android.view.View.dispatchTouchEvent(View.java:3709)
09-13 18:44:18.976: W/System.err(3612): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
09-13 18:44:18.987: W/System.err(3612): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
09-13 18:44:18.987: W/System.err(3612): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
09-13 18:44:18.987: W/System.err(3612): at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
09-13 18:44:18.997: W/System.err(3612): at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1659)
09-13 18:44:18.997: W/System.err(3612): at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1107)
09-13 18:44:18.997: W/System.err(3612): at android.app.Activity.dispatchTouchEvent(Activity.java:2061)
09-13 18:44:18.997: W/System.err(3612): at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1643)
09-13 18:44:18.997: W/System.err(3612): at android.view.ViewRoot.handleMessage(ViewRoot.java:1691)
09-13 18:44:18.997: W/System.err(3612): at android.os.Handler.dispatchMessage(Handler.java:99)
09-13 18:44:18.997: W/System.err(3612): at android.os.Looper.loop(Looper.java:123)
09-13 18:44:18.997: W/System.err(3612): at android.app.ActivityThread.main(ActivityThread.java:4363)
09-13 18:44:19.011: W/System.err(3612): at java.lang.reflect.Method.invokeNative(Native Method)
09-13 18:44:19.011: W/System.err(3612): at java.lang.reflect.Method.invoke(Method.java:521)
09-13 18:44:19.011: W/System.err(3612): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
09-13 18:44:19.011: W/System.err(3612): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
09-13 18:44:19.011: W/System.err(3612): at dalvik.system.NativeStart.main(Native Method)
我在这一行得到空指针异常:
fos = new FileOutputStream(folder);
提前致谢。