图片POST Android

时间:2015-11-23 11:31:01

标签: java android android-asynctask

我正在尝试从Android图片中为API发布POST。请帮帮我?

HttpClient client = new DefaultHttpClient();
File file = new File( "/storage/emulated/0/WhatsApp/Media/WhatsApp Images/IMG-20151116-WA0004.jpg" );
HttpPost post = new HttpPost("http://XX.XX.XXX.XXX/users/photo/");

MultipartEntityBuilder entityBuilder = MultipartEntityBuilder.create();
entityBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

entityBuilder.addBinaryBody("photo", file); <<== Error
entityBuilder.addTextBody("user", "98");

HttpEntity entity = entityBuilder.build();
post.setEntity(entity);

错误:

11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime: FATAL EXCEPTION: AsyncTask #4
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime: Process: br.com.bzum.myapplication, PID: 28282
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime: java.lang.RuntimeException: An error occured while executing doInBackground()
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at android.os.AsyncTask$3.done(AsyncTask.java:300)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:242)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:841)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:  Caused by: java.lang.NoClassDefFoundError: org.apache.http.entity.ContentType
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at org.apache.http.entity.mime.MultipartEntityBuilder.addBinaryBody(MultipartEntityBuilder.java:146)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at br.com.bzum.app.api.Api.postPhoto(Api.java:74)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at br.com.bzum.app.api.ApiTaskPost.doInBackground(ApiTaskPost.java:23)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at br.com.bzum.app.api.ApiTaskPost.doInBackground(ApiTaskPost.java:9)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at android.os.AsyncTask$2.call(AsyncTask.java:288)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.FutureTask.run(FutureTask.java:237)
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231) 
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) 
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) 
11-23 09:27:22.874 28282-28441/br.com.bzum.myapplication E/AndroidRuntime:     at java.lang.Thread.run(Thread.java:841) 

1 个答案:

答案 0 :(得分:0)

它可以帮助你。

private Intent getShareIntent(String type, String subject)
{
    boolean found = false;
    Intent share = new Intent(android.content.Intent.ACTION_SEND);
    share.setType("image/png");
    // gets the list of intents that can be loaded.
    List<ResolveInfo> resInfo = this.getPackageManager().queryIntentActivities(share, 0);
    System.out.println("resinfo: " + resInfo);
Uri phototUri = Uri.parse("file:///sdcard/test.png");
    if (!resInfo.isEmpty()){
        for (ResolveInfo info : resInfo) {
            if (info.activityInfo.packageName.toLowerCase().contains(type) ||
                    info.activityInfo.name.toLowerCase().contains(type) ) {
                share.setAction(Intent.ACTION_SEND);
                share.setType("image/png");
                share.putExtra(Intent.EXTRA_SUBJECT, subject);
                // Attach the PDf as a Uri, since Android can't take it as bytes yet.
                share.putExtra(Intent.EXTRA_STREAM, phototUri);
                share.setPackage(info.activityInfo.packageName);
                found = true;
                break;
            }
        }
        if (!found)
            return null;

        return share;
    }
return null;}