以下是我从Android相机获取图片的方式:
Bitmap photo = (Bitmap) data.getExtras().get("data");
ByteArrayOutputStream stream = new ByteArrayOutputStream();
byte[] byteArrayImage = stream.toByteArray();
File f;
try
{
f = File.createTempFile("temp-file-name", ".png");
f.createNewFile();
FileOutputStream fos = new FileOutputStream(f);
fos.write(byteArrayImage);
fos.close();
}
catch (IOException e)
{
e.printStackTrace();
}
然后我用我创建的文件调用此函数:
public String multiPartExecute(String url, String keyOfString, String request, String keyForFile, File file)
{
HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(url);
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart(keyForFile, new FileBody(file)); //here is the crash
multipartEntity.addTextBody(keyOfString, request);
post.setEntity(multipartEntity.build());
HttpResponse response = null;
String line = "", output = "";
try
{
response = client.execute(post);
BufferedReader br = new BufferedReader(new InputStreamReader((response.getEntity().getContent())));
while ((line = br.readLine()) != null)
{
output += line;
}
}
catch (ClientProtocolException e)
{
e.printStackTrace();
return null;
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
if (response.getStatusLine().getStatusCode() != 200)
{
response.getStatusLine().getStatusCode();
return null;
}
HttpEntity entity = response.getEntity();
try
{
entity.consumeContent();
}
catch (IOException e)
{
e.printStackTrace();
return null;
}
client.getConnectionManager().shutdown();
return output;
}
我在这一行发生了崩溃:multipartEntity.addPart(keyForFile, new FileBody(file));
。
Here is the log cat output:
02-05 11:46:40.359: E/WindowManager(9773): Activity com.evapp.activities.NewEventActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@a70e4b40 that was originally added here
02-05 11:46:40.359: E/WindowManager(9773): android.view.WindowLeaked: Activity com.evapp.activities.NewEventActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@a70e4b40 that was originally added here
02-05 11:46:40.359: E/WindowManager(9773): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:374)
02-05 11:46:40.359: E/WindowManager(9773): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:292)
02-05 11:46:40.359: E/WindowManager(9773): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:224)
02-05 11:46:40.359: E/WindowManager(9773): at android.view.WindowManagerImpl$CompatModeWrapper.addView(WindowManagerImpl.java:149)
02-05 11:46:40.359: E/WindowManager(9773): at android.view.Window$LocalWindowManager.addView(Window.java:547)
02-05 11:46:40.359: E/WindowManager(9773): at android.app.Dialog.show(Dialog.java:277)
02-05 11:46:40.359: E/WindowManager(9773): at com.evapp.activities.BaseActivity.showLoadingDialog(BaseActivity.java:39)
02-05 11:46:40.359: E/WindowManager(9773): at com.evapp.activities.NewEventActivity$CreateNewActivityTask.onPreExecute(NewEventActivity.java:470)
02-05 11:46:40.359: E/WindowManager(9773): at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
02-05 11:46:40.359: E/WindowManager(9773): at android.os.AsyncTask.execute(AsyncTask.java:534)
02-05 11:46:40.359: E/WindowManager(9773): at com.evapp.activities.NewEventActivity.createEvent(NewEventActivity.java:423)
02-05 11:46:40.359: E/WindowManager(9773): at com.evapp.activities.NewEventActivity$11.onClick(NewEventActivity.java:277)
02-05 11:46:40.359: E/WindowManager(9773): at android.view.View.performClick(View.java:4084)
02-05 11:46:40.359: E/WindowManager(9773): at android.view.View$PerformClick.run(View.java:16966)
02-05 11:46:40.359: E/WindowManager(9773): at android.os.Handler.handleCallback(Handler.java:615)
02-05 11:46:40.359: E/WindowManager(9773): at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 11:46:40.359: E/WindowManager(9773): at android.os.Looper.loop(Looper.java:137)
02-05 11:46:40.359: E/WindowManager(9773): at android.app.ActivityThread.main(ActivityThread.java:4745)
02-05 11:46:40.359: E/WindowManager(9773): at java.lang.reflect.Method.invokeNative(Native Method)
02-05 11:46:40.359: E/WindowManager(9773): at java.lang.reflect.Method.invoke(Method.java:511)
02-05 11:46:40.359: E/WindowManager(9773): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
02-05 11:46:40.359: E/WindowManager(9773): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
02-05 11:46:40.359: E/WindowManager(9773): at dalvik.system.NativeStart.main(Native Method)
我缺少什么?找不到logcat的任何想法。
注意:在注释掉对话框show方法和有问题的行之后,我在logcat中得到了这个跟踪:
02-05 12:14:09.591: E/AndroidRuntime(10499): FATAL EXCEPTION: AsyncTask #4
02-05 12:14:09.591: E/AndroidRuntime(10499): java.lang.RuntimeException: An error occured while executing doInBackground()
02-05 12:14:09.591: E/AndroidRuntime(10499): at android.os.AsyncTask$3.done(AsyncTask.java:299)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
02-05 12:14:09.591: E/AndroidRuntime(10499): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.lang.Thread.run(Thread.java:856)
02-05 12:14:09.591: E/AndroidRuntime(10499): Caused by: java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType
02-05 12:14:09.591: E/AndroidRuntime(10499): at org.apache.http.entity.mime.MultipartEntityBuilder.addTextBody(MultipartEntityBuilder.java:126)
02-05 12:14:09.591: E/AndroidRuntime(10499): at com.evapp.serverlayer.BaseServer.multiPartExecute(BaseServer.java:183)
02-05 12:14:09.591: E/AndroidRuntime(10499): at com.evapp.serverlayer.AppServer.createNewEvent(AppServer.java:77)
02-05 12:14:09.591: E/AndroidRuntime(10499): at com.evapp.services.EventService.createNewEvent(EventService.java:14)
02-05 12:14:09.591: E/AndroidRuntime(10499): at com.evapp.logic.NewEventActivityLogic.createNewEvent(NewEventActivityLogic.java:16)
02-05 12:14:09.591: E/AndroidRuntime(10499): at com.evapp.activities.NewEventActivity$CreateNewActivityTask.doInBackground(NewEventActivity.java:476)
02-05 12:14:09.591: E/AndroidRuntime(10499): at com.evapp.activities.NewEventActivity$CreateNewActivityTask.doInBackground(NewEventActivity.java:1)
02-05 12:14:09.591: E/AndroidRuntime(10499): at android.os.AsyncTask$2.call(AsyncTask.java:287)
02-05 12:14:09.591: E/AndroidRuntime(10499): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
02-05 12:14:09.591: E/AndroidRuntime(10499): ... 5 more
答案 0 :(得分:2)
您的错误在这里:
02-05 11:46:40.359: E/WindowManager(9773): at android.app.Dialog.show(Dialog.java:277)
02-05 11:46:40.359: E/WindowManager(9773): at com.evapp.activities.BaseActivity.showLoadingDialog(BaseActivity.java:39)
02-05 11:46:40.359: E/WindowManager(9773): at com.evapp.activities.NewEventActivity$CreateNewActivityTask.onPreExecute(NewEventActivity.java:470)
窗口泄露错误主要是因为您尝试在不再存在的活动中显示某些内容。检查这条路线。
由于您使用asyncTask
经常未处理的Exceptions
导致您的活动关闭,因此打开任何类型的进度对话框都会导致上述错误,因为此活动不存在。确保在发生这种情况时关闭或不关闭对话框
修改强>
现在我们看到您真正的错误,现在您评论了对话框:
该类似乎缺少Apache HttpCore库