使用 HttpClient上传图片、文字到服务器
1.需要在build.gradle中android下添加 useLibrary'org.apache.http.legacy'
android {
useLibrary'org.apache.http.legacy'
}
添加HttpClient库
2(.导入httpmime-4.1.1.jar )
3.......
public class UploadTask extends AsyncTask<String, Integer, String> { private Activity mContext; public UploadTask(Activity context) { this.mContext = context; } @Override protected String doInBackground(String... urls) { for (String url : urls) { uploadFile(url); } return null; } protected void onPostExecute(String result) { } protected void onProgressUpdate(Integer... progress) { } // upload photos public void uploadFile(String uploadFile) { try{ HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(API_BASE_URL+"***");//上传地址 MultipartEntity mpEntity = new MultipartEntity(); File file = new File(uploadFile); ContentBody cbFile = new FileBody(file); mpEntity.addPart("imgFile", cbFile);// 图片 mpEntity.addPart("参数1", new StringBody(参数1));//文字参数1 mpEntity.addPart("参数2", new StringBody(参数2, Charset.forName("utf-8")));//文件参数2 mpEntity.addPart("参数3", new StringBody(参数3, Charset.forName("utf-8"))); httppost.setEntity(mpEntity); HttpResponse response = httpclient.execute(httppost); int statusCode=response.getStatusLine().getStatusCode(); if(200 == statusCode){ // String result = EntityUtils.toString(response.getEntity()); StringBuilder builder = new StringBuilder(); BufferedReader bufferedReader = null; try { bufferedReader = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); for (String s = bufferedReader.readLine(); s != null; s = bufferedReader.readLine()) { builder.append(s); } // Log.e(TAG, "newPost"+"builder.toString()=" + builder.toString());//Result Gson gson = new Gson(); //不能直接进行转换要借助typetoken不然会报android.view.ViewRootImpl$CalledFromWrongThreadException.... Type type = new TypeToken<HttpResult<UserBean>>(){}.getType(); HttpResult<UserBean> userBean = gson.fromJson(builder.toString(),type); LogUtil.d("newPost","userBean----->"+userBean.toString()); //这里是工作线程不能直接进行UI操作,用handler发个消息给主线程进行操作; Message msg = new Message(); msg.what = UPDATE_UI ; msg.obj = userBean; handler.sendMessage(msg); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } }else{ LogUtil.d("newPost","boom--error--->"); Message msg = new Message(); msg.what = ERROR ; handler.sendMessage(msg); } httpclient.getConnectionManager().shutdown(); }catch(Exception e){ Message msg = new Message(); msg.what = ERROR ; handler.sendMessage(msg); e.printStackTrace(); } } }
在启动上传任务的地方执行:
UploadTask ut = new UploadTask(Activity.this); ut.execute(picturePath); //urls为本地图片路径数组