我遇到了一個我不知道如何解決的問題。
GetDataTask工作正常。但是當我上傳一個文件時,請求被髮送,但是隻有在文件上傳完成後纔會有響應! GetDataTask和UploadTask使用AsyncTask異步運行。
任何想法爲什麼它不起作用,以及爲什麼在文件上傳時響應不會回來。
有沒有另一種方法來實現這一點?
問題是,它應該並行運行,但不幸的是它們正在同步運行。
我已在下面發佈我的實際來源。
在此先感謝。上傳文件時網絡請求不起作用
的GetData任務:
private class GetDataTask extends AsyncTask<String, Void, String>{
@Override
protected void onPreExecute() {
}
@Override
protected String doInBackground(String... params) {
return NetConnection.getRecordData(mUserId, mUserPassword);
}
@Override
protected void onPostExecute(String result) {
parseJson(result);
}
}
上傳任務:
private class HttpMultipartPost extends AsyncTask<String, Integer, String>
{
TextProgressBar pb;
long totalSize;
String filePath;
@Override
protected void onPreExecute()
{
pb = (TextProgressBar) findViewById(R.id.idPBUploadProgress);
pb.setMax(100);
}
@Override
protected String doInBackground(String... arg)
{
HttpClient httpClient = new DefaultHttpClient();
HttpContext httpContext = new BasicHttpContext();
HttpPost httpPost = new HttpPost(Utils.UPLOAD_URL);
try
{
CustomMultiPartEntity multipartContent = new CustomMultiPartEntity(new ProgressListener()
{
@Override
public void transferred(long num)
{
publishProgress((int) ((num/(float) totalSize) * 100));
//Log.v(TAG, "Progress =" + num);
}
});
// We use FileBody to transfer an file
filePath = arg[0];
multipartContent.addPart("upfile", new FileBody(new File(filePath)));
totalSize = multipartContent.getContentLength();
Log.e(TAG, "Upload file size = " + totalSize/1048576 + "MB") ;
// Send it
httpPost.setEntity(multipartContent);
HttpResponse response = httpClient.execute(httpPost, httpContext);
String serverResponse = EntityUtils.toString(response.getEntity());
return serverResponse;
}
catch (Exception e)
{
System.out.println(e);
}
return null;
}
@Override
protected void onProgressUpdate(Integer... progress)
{
pb.setProgress((int) (progress[0]));
pb.setText(progress[0] + "%");
}
@Override
protected void onPostExecute(String result)
{
Log.e(TAG, "Response =" + result);
parseResult(result, filePath);
}
}
什麼Android版本以及你如何打電話給他們? – codeMagic 2013-03-18 02:08:07
@Lazy Ninja在下面看到我的答案。使用此代碼,您可以在%(上傳到服務器)中顯示水平進度條。謝謝 – 2013-03-18 02:08:29
@codeMagic我正在測試Android 4.0.3設備。 – 2013-03-18 02:11:21