I'm working on a drawing app, and the code for my file saving routine goes
like this:
case SAVE_MENU_ID:
Config config = Config.ARGB_8888;
Bitmap mBitmap = Bitmap.createBitmap(mDrawingPanel.getWidth(),
mDrawingPanel.getHeight(), config);
Canvas canvas = new Canvas(mBitmap);
mDrawingPanel.draw(canvas);
Handler saveHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
final AlertDialog alertDialog = new AlertDialog.Builder(_panel).create();
alertDialog.setTitle("Saved 1");
alertDialog.setMessage("Your drawing had been saved :)");
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
return;
}
});
alertDialog.show();
}
} ;
new ExportBitmapToFile(_panel, saveHandler, mBitmap).execute(null);
return true;
}
The ExportBitmapToFile class is as follows:
private class ExportBitmapToFile extends AsyncTask<Intent,Void,Boolean> {
private Context mContext;
private Handler mHandler;
private Bitmap nBitmap;
public ExportBitmapToFile(Context context,Handler handler,Bitmap bitmap) {
mContext = context;
nBitmap = bitmap;
mHandler = handler;
}
@Override
protected Boolean doInBackground(Intent... arg0) {
try {
if (!APP_FILE_PATH.exists()) {
APP_FILE_PATH.mkdirs();
}
final FileOutputStream out = new FileOutputStream(new File(APP_FILE_PATH +
"/myAwesomeDrawing.png"));
nBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
out.flush();
out.close();
return true;
}catch (Exception e) {
e.printStackTrace();
}
Toast.makeText(_panel, "Success!", 5);
return false;
}
@Override
protected void onPostExecute(Boolean bool) {
super.onPostExecute(bool);
if ( bool ){
mHandler.sendEmptyMessage(1);
}
}
}
The logcat is attached.
--
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en08-12 11:42:20.880: ERROR/AndroidRuntime(12793): FATAL EXCEPTION: AsyncTask #1
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): java.lang.RuntimeException: An
error occured while executing doInBackground()
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
android.os.AsyncTask$3.done(AsyncTask.java:266)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.util.concurrent.FutureTask.setException(FutureTask.java:124)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.util.concurrent.FutureTask.run(FutureTask.java:137)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1081)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:574)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.lang.Thread.run(Thread.java:1020)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): Caused by:
java.lang.RuntimeException: Can't create handler inside thread that has not
called Looper.prepare()
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
android.os.Handler.<init>(Handler.java:121)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
android.widget.Toast$TN.<init>(Toast.java:310)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
android.widget.Toast.<init>(Toast.java:84)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
android.widget.Toast.makeText(Toast.java:226)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
com.appineering.android.drawingpad.DrawActivity$ExportBitmapToFile.doInBackground(DrawActivity.java:236)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
com.appineering.android.drawingpad.DrawActivity$ExportBitmapToFile.doInBackground(DrawActivity.java:1)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
android.os.AsyncTask$2.call(AsyncTask.java:252)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): at
java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
08-12 11:42:20.880: ERROR/AndroidRuntime(12793): ... 4 more
08-12 11:42:20.900: WARN/ActivityManager(140): Force finishing activity
com.appineering.android.drawingpad/.DrawActivity