我正在尝试从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)
答案 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;}