0

我正在尝试通过 post php 将图像和字符串一起发送。我添加了外部 jar httpclientandroidlib-1.1.2.jar但它一直在崩溃我尝试了下面的两个代码但它仍然崩溃。下面的代码需要 snapsot 然后按下按钮上传它应该上传。我非常感谢任何帮助。在此先感谢。

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

下面的代码也不起作用我已经尝试了这两个代码:

                    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) {
                }

logcat 错误之一:

 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)

对于其他代码:

 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 文件:

<?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!!!');;        
}
?>
4

1 回答 1

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!

于 2013-11-27T02:25:04.180 回答