画像を 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);
前もって感謝します。