android实现带进度条的文件上传
MainActivity.java
package com.example.upload; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.ProgressBar; public class MainActivity extends Activity implements OnClickListener{ public static String url = "https://xxx.xxx.xx"; public static String path = "/sdcard/wrar380sc.exe"; public static ProgressBar bar; Button upload; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); bar = (ProgressBar) findViewById(R.id.ProgressBar01); upload = (Button) findViewById(R.id.button1); upload.setOnClickListener(this); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onClick(View v) { HttpMultipartPost task = new HttpMultipartPost(this); task.execute(); } }
HttpMultipartPost.java
package com.example.upload; import java.io.File; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.protocol.BasicHttpContext; import org.apache.http.protocol.HttpContext; import org.apache.http.util.EntityUtils; import android.app.ProgressDialog; import android.content.Context; import android.os.AsyncTask; import com.example.upload.CustomMultiPartEntity.ProgressListener; public class HttpMultipartPost extends AsyncTask<HttpResponse, Integer, String> { ProgressDialog pd; long totalSize; Context context; public HttpMultipartPost(Context context) { this.context = context; } @Override protected void onPreExecute() { pd = new ProgressDialog(context); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); pd.setMessage("Uploading Picture..."); pd.setCancelable(false); pd.show(); } @Override protected String doInBackground(HttpResponse... arg0) { HttpClient httpClient = new DefaultHttpClient(); HttpContext httpContext = new BasicHttpContext(); HttpPost httpPost = new HttpPost(MainActivity.url); try { CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(new ProgressListener() { @Override public void transferred(long num) { publishProgress((int) ((num / (float) totalSize) * 100)); } }); // We use FileBody to transfer an image multipartContent.addPart("file", new FileBody(new File(MainActivity.path))); totalSize = multipartContent.getContentLength(); // Send it httpPost.setEntity(multipartContent); HttpResponse response = httpClient.execute(httpPost, httpContext); String serverResponse = EntityUtils.toString(response.getEntity()); // ResponseFactory rp = new ResponseFactory(serverResponse); // return (TypeImage) rp.getData(); return serverResponse; } catch (Exception e) { System.out.println(e); } return null; } @Override protected void onProgressUpdate(Integer... progress) { pd.setProgress((int) (progress[0])); } @Override protected void onPostExecute(String ui) { pd.dismiss(); } }
自定义的CustomMultiPartEntity.java
https://blog.csdn.net/jdsjlzx/article/details/8895035
完整代码:
https://download.csdn.net/download/yyc_god/5045872最后更新:2017-04-03 18:51:47