vlio20
vlio20

Reputation: 9295

Crash on image upload

Here is how I am getting an image from android camera:

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();
}

Then I am calling this function with the file I have created:

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;
    }

I have a crash on this line: 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)

What I am missing? Can't find any ideas from the logcat.

NOTE: after commenting out the dialog show method and the problematic line, I am getting this trace in 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

Upvotes: 0

Views: 682

Answers (1)

Timmetje
Timmetje

Reputation: 7694

Your error is here:

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)

Window leaked errors are mostly because you try to show something in a activity that doesn't exist anymore. Check this route.

Because you use a asyncTask often unhandled Exceptions cause your activity to shutdown, opening a progress dialog of any kind will cause the above error because this activity does not exists. Make sure the dialog is dismissed or not made when this happens

Edit

Now we see your real error now you commented dialog:

The class seems to be missing the Apache HttpCore library

http://hc.apache.org/downloads.cgi

Upvotes: 2

Related Questions