0

I'm new in android. I have imported a project which takes picture from my mobile and is supposed to upload it on my localhost in my laptop. Both are connected to same WiFi and it runs until I take picture and click upload but as i click upload, it crashes. These are the errors I am getting in my log-cat. Can anyone help me to sort it out?

08-22 12:00:43.871: E/AndroidRuntime(2491): FATAL EXCEPTION: AsyncTask #1

08-22 12:00:43.871: E/AndroidRuntime(2491): java.lang.RuntimeException: An error occured while executing doInBackground()

08-22 12:00:43.871: E/AndroidRuntime(2491):     at android.os.AsyncTask$3.done(AsyncTask.java:278)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask.setException(FutureTask.java:124)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask.run(FutureTask.java:137)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.lang.Thread.run(Thread.java:856)

08-22 12:00:43.871: E/AndroidRuntime(2491): Caused by: java.lang.NoClassDefFoundError: info.androidhive.camerafileupload.AndroidMultiPartEntity

08-22 12:00:43.871: E/AndroidRuntime(2491):     at info.androidhive.camerafileupload.UploadActivity$UploadFileToServer.uploadFile(UploadActivity.java:156)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at info.androidhive.camerafileupload.UploadActivity$UploadFileToServer.doInBackground(UploadActivity.java:145)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at info.androidhive.camerafileupload.UploadActivity$UploadFileToServer.doInBackground(UploadActivity.java:1)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at android.os.AsyncTask$2.call(AsyncTask.java:264)

08-22 12:00:43.871: E/AndroidRuntime(2491):     at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

08-22 12:00:43.871: E/AndroidRuntime(2491):     ... 5 more

package info.androidhive.camerafileupload;

   import  info.androidhive.camerafileupload.AndroidMultiPartEntity.ProgressListener;

  import java.io.File;
  import java.io.IOException;

  import org.apache.http.HttpEntity;
  import org.apache.http.HttpResponse;
  import org.apache.http.client.ClientProtocolException;
  import org.apache.http.client.HttpClient;
  import org.apache.http.client.methods.HttpPost;
  import org.apache.http.entity.mime.content.FileBody;
  import org.apache.http.entity.mime.content.StringBody;
  import org.apache.http.impl.client.DefaultHttpClient;
  import org.apache.http.util.EntityUtils;

  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.DialogInterface;
  import android.content.Intent;
  import android.graphics.Bitmap;
  import android.graphics.BitmapFactory;
  import android.graphics.Color;
  import android.graphics.drawable.ColorDrawable;
  import android.os.AsyncTask;
  import android.os.Bundle;
  import android.util.Log;
  import android.view.View;
  import android.widget.Button;
  import android.widget.ImageView;
  import android.widget.ProgressBar;
  import android.widget.TextView;
  import android.widget.Toast;
  import android.widget.VideoView;

     public class UploadActivity extends Activity {
      // LogCat tag
     private static final String TAG = MainActivity.class.getSimpleName();

     private ProgressBar progressBar;
     private String filePath = null;
     private TextView txtPercentage;
     private ImageView imgPreview;
     private VideoView vidPreview;
     private Button btnUpload;
      long totalSize = 0;

     @Override
     protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_upload);
    txtPercentage = (TextView) findViewById(R.id.txtPercentage);
    btnUpload = (Button) findViewById(R.id.btnUpload);
    progressBar = (ProgressBar) findViewById(R.id.progressBar);
    imgPreview = (ImageView) findViewById(R.id.imgPreview);
    vidPreview = (VideoView) findViewById(R.id.videoPreview);

    // Changing action bar background color
    getActionBar().setBackgroundDrawable(
            new ColorDrawable(Color.parseColor(getResources().getString(
                    R.color.action_bar))));

    // Receiving the data from previous activity
    Intent i = getIntent();

    // image or video path that is captured in previous activity
    filePath = i.getStringExtra("filePath");

    // boolean flag to identify the media type, image or video
    boolean isImage = i.getBooleanExtra("isImage", true);

    if (filePath != null) {
        // Displaying the image or video on the screen
        previewMedia(isImage);
    } else {
        Toast.makeText(getApplicationContext(),
                "Sorry, file path is missing!", Toast.LENGTH_LONG).show();
    }

       btnUpload.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // uploading the file to server
            new UploadFileToServer().execute();
        }
    });

      }

          /**
         * Displaying captured image/video on the screen
            * */
        private void previewMedia(boolean isImage) {
        // Checking whether captured media is image or video
        if (isImage) {
        imgPreview.setVisibility(View.VISIBLE);
        vidPreview.setVisibility(View.GONE);
        // bimatp factory
        BitmapFactory.Options options = new BitmapFactory.Options();

        // down sizing image as it throws OutOfMemory Exception for larger
        // images
        options.inSampleSize = 8;

        final Bitmap bitmap = BitmapFactory.decodeFile(filePath, options);

        imgPreview.setImageBitmap(bitmap);
       } else {
        imgPreview.setVisibility(View.GONE);
        vidPreview.setVisibility(View.VISIBLE);
        vidPreview.setVideoPath(filePath);
        // start playing
        vidPreview.start();
    }
     }

   /**
   * Uploading the file to server
    * */
   private class UploadFileToServer extends AsyncTask<Void, Integer, String>    
     {

        @Override
         protected void onPreExecute() {
        // setting progress bar to zero
        progressBar.setProgress(0);
        super.onPreExecute();
        }

            @Override
            protected void onProgressUpdate(Integer... progress) {
            // Making progress bar visible
            progressBar.setVisibility(View.VISIBLE);

            // updating progress bar value
            progressBar.setProgress(progress[0]);

          // updating percentage value
          txtPercentage.setText(String.valueOf(progress[0]) + "%");
          }

         @Override
         protected String doInBackground(Void... params) {
         return uploadFile();
         }

         @SuppressWarnings("deprecation")
         private String uploadFile() {
        String responseString = null;

        HttpClient httpclient = new DefaultHttpClient();
        HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL);

         try {
            AndroidMultiPartEntity entity = new AndroidMultiPartEntity(
                    new ProgressListener() {

                        @Override
                        public void transferred(long num) {
                publishProgress((int) ((num / (float) totalSize) * 100));
                        }
                    });

            File sourceFile = new File(filePath);

            // Adding file data to http body
            entity.addPart("image", new FileBody(sourceFile));

            // Extra parameters if you want to pass to server
            entity.addPart("website",
                    new StringBody("www.androidhive.info"));
            entity.addPart("email", new StringBody("abc@gmail.com"));

            totalSize = entity.getContentLength();
            httppost.setEntity(entity);

            // Making server call
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity r_entity = response.getEntity();

            int statusCode = response.getStatusLine().getStatusCode();
            if (statusCode == 200) {
                // Server response
                responseString = EntityUtils.toString(r_entity);
            } else {
                responseString = "Error occurred! Http Status Code: "
                        + statusCode;
            }

        } catch (ClientProtocolException e) {
            responseString = e.toString();
        } catch (IOException e) {
            responseString = e.toString();
        }

        return responseString;

        }

        @Override
        protected void onPostExecute(String result) {
        Log.e(TAG, "Response from server: " + result);

        // showing the server response in an alert dialog
        showAlert(result);

        super.onPostExecute(result);
    }

   }

   /**
   * Method to show alert dialog
   * */
 private void showAlert(String message) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setMessage(message).setTitle("Response from Servers")
            .setCancelable(false)
            .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int id) {
                    // do nothing
                }
            });
    AlertDialog alert = builder.create();
    alert.show();
}
}

this is AndroidMultiPart class

   package info.androidhive.camerafileupload;

   import java.io.FilterOutputStream;
   import java.io.IOException;
   import java.io.OutputStream; 
   import java.nio.charset.Charset;

   import org.apache.http.entity.mime.HttpMultipartMode;
   import org.apache.http.entity.mime.MultipartEntity;

   @SuppressWarnings("deprecation")
   public class AndroidMultiPartEntity extends MultipartEntity

   {

    private final ProgressListener listener;

    public AndroidMultiPartEntity(final ProgressListener listener) {
    super();
    this.listener = listener;
   }

    public AndroidMultiPartEntity(final HttpMultipartMode mode,
        final ProgressListener listener) {
    super(mode);
    this.listener = listener;
    }

    public AndroidMultiPartEntity(HttpMultipartMode mode, final String  boundary,
        final Charset charset, final ProgressListener listener) {
    super(mode, boundary, charset);
    this.listener = listener;
    }

    @Override
    public void writeTo(final OutputStream outstream) throws IOException {
    super.writeTo(new CountingOutputStream(outstream, this.listener));
    }

    public static interface ProgressListener {
    void transferred(long num);
   }

   public static class CountingOutputStream extends FilterOutputStream {

    private final ProgressListener listener;
    private long transferred;

    public CountingOutputStream(final OutputStream out,
            final ProgressListener listener) {
        super(out);
        this.listener = listener;
        this.transferred = 0;
    }

    public void write(byte[] b, int off, int len) throws IOException {
        out.write(b, off, len);
        this.transferred += len;
        this.listener.transferred(this.transferred);
    }

        public void write(int b) throws IOException {
        out.write(b);
        this.transferred++;
        this.listener.transferred(this.transferred);
    }
  }
  }
HassanUsman
  • 1,787
  • 1
  • 20
  • 38
user3102917
  • 19
  • 1
  • 7
  • Could you share some of where the error happens? (UploadActivity at line 156) – Coen B Aug 23 '15 at 07:33
  • line 156 starts after try i.e protected String doInBackground(Void... params) { return uploadFile(); } @SuppressWarnings("deprecation") private String uploadFile() { String responseString = null; HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(Config.FILE_UPLOAD_URL); try { AndroidMultiPartEntity entity = new AndroidMultiPartEntity( new ProgressListener() { @Override public void transferred(long num) { publishProgress((int) ((num / (float) totalSize) * 100)); } }); – user3102917 Aug 23 '15 at 07:39
  • it can't find AndroidMultiPartEntity class, try clean and then rebuild it. – meghraj27 Aug 23 '15 at 07:48
  • i have added that class also – user3102917 Aug 23 '15 at 07:53

2 Answers2

0

I see a NoClassDefFoundError, have you tried the old "Clean Project" before you compiled it?

Templerschaf
  • 142
  • 1
  • 8
0

Although the specific jar/aar might be added to the project, Android Studio still has to be told that its there. Have you added the dependency in your app's build.gradle file and clicked "sync gradle"?

Edit

Regarding NoClassDefFoundError's in Eclipse, I just found this article which might be intersting.

Coen B
  • 725
  • 5
  • 12