0

I am trying to send image and string together via post php .I have added external jar httpclientandroidlib-1.1.2.jar But its crashing all the time I tried both codes below but still it crashes .The code below takes snapsot and then pressing the button upload it should upload.I really appreciate any help.Thanks in Advance.

Button btn=(Button)findViewById(R.id.snapshot);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {

                Intent i=new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                startActivityForResult(i, 0);

            }
        });

        uploadButton=(Button)findViewById(R.id.uploadButton);

            uploadButton.setOnClickListener(new OnClickListener() {            
                @Override
                public void onClick(View v) {

                    if (finalFile!=null) {

                        HttpPost httpost = new HttpPost("http://example/test.php");
                        MultipartEntity entity = new MultipartEntity();
                        try {
                            entity.addPart("name", new StringBody("test"));
                        } catch (UnsupportedEncodingException e1) {
                            // TODO Auto-generated catch block
                            e1.printStackTrace();
                        }
                        entity.addPart("image", new FileBody(finalFile));

                        httpost.setEntity(entity);
                        HttpResponse response;
                        HttpClient httpclient = null;
                        try {
                            response = httpclient.execute(httpost);
                        } catch (ClientProtocolException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        } catch (IOException e) {
                            // TODO Auto-generated catch block
                            e.printStackTrace();
                        }

                    }
                }});


    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // TODO Auto-generated method stub
    //  super.onActivityResult(requestCode, resultCode, data);

        if (requestCode==0) {

            if (data!=null) {


                Bitmap bt=(Bitmap) data.getExtras().get("data");

                Uri tempUri = getImageUri(getApplicationContext(), bt);

                 finalFile = new File(getRealPathFromURI(tempUri));

            }

        }


    }


public Uri getImageUri(Context inContext, Bitmap inImage) {
    ByteArrayOutputStream bytes = new ByteArrayOutputStream();
    inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes);
    String path = Images.Media.insertImage(inContext.getContentResolver(), inImage, "Title", null);
    return Uri.parse(path);
}

public String getRealPathFromURI(Uri uri) {
    Cursor cursor = getContentResolver().query(uri, null, null, null, null); 
    cursor.moveToFirst(); 
    int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA); 
    return cursor.getString(idx); 
}

Also the code below does not work I have tried both the codes:

                    HttpClient httpclient = new DefaultHttpClient();
                    HttpPost httppost = new HttpPost(
                            "http://example/test.php");

                    try {
                        MultipartEntity entity = new MultipartEntity();

                        entity.addPart("name", new StringBody("test"));
                        entity.addPart("image", new FileBody(finalFile));

                        httppost.setEntity(entity);
                        HttpResponse response = httpclient.execute(httppost);

                        Log.e("test", "SC:" + response.getStatusLine().getStatusCode());

                        HttpEntity resEntity = response.getEntity();

                        BufferedReader reader = new BufferedReader(new InputStreamReader(
                                response.getEntity().getContent(), "UTF-8"));
                        String sResponse;
                        StringBuilder s = new StringBuilder();

                        while ((sResponse = reader.readLine()) != null) {
                            s = s.append(sResponse);
                        }
                        Log.e("test", "Response: " + s);
        } catch (ClientProtocolException e) {
                } catch (IOException e) {
                }

One of the logcat error:

 FATAL EXCEPTION: main
 java.lang.NoClassDefFoundError: ch.boye.httpclientandroidlib.client.methods.HttpPost
    at com.example.MainActivity$2.onClick(MainActivity.java:158)
    at android.view.View.performClick(View.java:3549)
    at android.view.View$PerformClick.run(View.java:14393)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:4945)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

For the other code :

 FATAL EXCEPTION: main
 android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1178)
    at java.net.InetAddress.lookupHostByName(InetAddress.java:394)
    at java.net.InetAddress.getAllByNameImpl(InetAddress.java:245)
    at java.net.InetAddress.getAllByName(InetAddress.java:220)
    at ch.boye.httpclientandroidlib.impl.conn.SystemDefaultDnsResolver.resolve(SystemDefaultDnsResolver.java:45)
    at ch.boye.httpclientandroidlib.impl.conn.DefaultClientConnectionOperator.resolveHostname(DefaultClientConnectionOperator.java:278)
    at ch.boye.httpclientandroidlib.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:162)
    at ch.boye.httpclientandroidlib.impl.conn.ManagedClientConnectionImpl.open(ManagedClientConnectionImpl.java:294)
    at ch.boye.httpclientandroidlib.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:645)
    at ch.boye.httpclientandroidlib.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:480)
    at ch.boye.httpclientandroidlib.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:902)
    at ch.boye.httpclientandroidlib.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:801)
    at ch.boye.httpclientandroidlib.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:780)
    at com.example1.MainActivity$2.onClick(MainActivity.java:133)
    at android.view.View.performClick(View.java:3549)
    at android.view.View$PerformClick.run(View.java:14393)
    at android.os.Handler.handleCallback(Handler.java:605)
    at android.os.Handler.dispatchMessage(Handler.java:92)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:4945)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:511)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
    at dalvik.system.NativeStart.main(Native Method)

PHP FIle:

<?php
$name=$_POST['name'];
$file = $_FILES['image'];
if (isset($name))
{
        $connect=mysql_connect("localhost","localhost","localhost") or die ('Connection error!!!');
        mysql_select_db("localhost") or die ('Database error!!!');
        $file_path = "/localhost/localhost/";

                if(move_uploaded_file($file, $file_path)) {
                 $query1=("INSERT INTO example(name,link) VALUES ( '$name','$file_path')");

            $query=mysql_query($query1)  or die(mysql_error()); 
            $json_output ='{"test":{"test":"'.$file.'"}}';
                } 

        echo trim($json_output);
        mysql_close($connect) or die ('Unable to close the connection!!!');;        
}
?>
jason
  • 3,932
  • 11
  • 52
  • 123

1 Answers1

0
 android.os.NetworkOnMainThreadException
    at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1178)
    at java.net.InetAddress.lookupHostByName(InetAddress.java:394)

Means you are trying to do Network operations on the main thread.
Use AsyncTask() which designed to do these kind of operations instead.

Just for test purposes, you can add the following after setcontentview only to see if your code works .

StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);

After making sure that your code work, Use AsyncTask because using StrictMode is strongly discouraged!

Lazy Ninja
  • 22,342
  • 9
  • 83
  • 103
  • Is my php code correct ? please tell me>Thanks for looking into it. – jason Nov 27 '13 at 02:29
  • I tried the code you have given its not crashing now but also the image is not uploaded nor data entered in the table. – jason Nov 27 '13 at 02:36