java - 在文件上传期间显示带有百分比的水平进度条的最佳方式?

标签 java android progress-bar

我是 Android 新手,正在尝试一个简单的图像上传应用程序。我可以使用 asynctask 完成所有上传,并且工作正常。我目前正在显示简单的进度对话框,一切都很好,但我想显示带有进度条的百分比。我正在使用 asynctask 进行上传,但不知道显示百分比。有人可以帮我做吗?

我的代码如下

public void UploadImageToServer(){

    FixBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);

    byteArray = byteArrayOutputStream.toByteArray();

    ConvertImage = Base64.encodeToString(byteArray, Base64.DEFAULT);

    class AsyncTaskUploadClass extends AsyncTask<Void,Void,String> {

        @Override
        protected void onPreExecute() {

            super.onPreExecute();


            progressDialog = ProgressDialog.show(MainActivity.this,"Image is Uploading","Please Wait",false,false);
        }

        @Override
        protected void onPostExecute(String string1) {

            super.onPostExecute(string1);

            progressDialog.dismiss();

            Toast.makeText(MainActivity.this,string1,Toast.LENGTH_LONG).show();

        }

        @Override
        protected String doInBackground(Void... params) {

            ImageProcessClass imageProcessClass = new ImageProcessClass();

            HashMap<String,String> HashMapParams = new HashMap<String,String>();

            HashMapParams.put(ImageTag, GetImageNameFromEditText);

            HashMapParams.put(ImageName, ConvertImage);

            String FinalData = imageProcessClass.ImageHttpRequest(URL, HashMapParams);

            return FinalData;
        }
    }
    AsyncTaskUploadClass AsyncTaskUploadClassOBJ = new AsyncTaskUploadClass();
    AsyncTaskUploadClassOBJ.execute();
}

public class ImageProcessClass{

    public String ImageHttpRequest(String requestURL,HashMap<String, String> PData) {

        StringBuilder stringBuilder = new StringBuilder();

        try {
            url = new URL(requestURL);

            httpURLConnection = (HttpURLConnection) url.openConnection();

            httpURLConnection.setReadTimeout(20000);

            httpURLConnection.setConnectTimeout(20000);

            httpURLConnection.setRequestMethod("POST");

            httpURLConnection.setDoInput(true);

            httpURLConnection.setDoOutput(true);

            outputStream = httpURLConnection.getOutputStream();

            bufferedWriter = new BufferedWriter(

                    new OutputStreamWriter(outputStream, "UTF-8"));

            bufferedWriter.write(bufferedWriterDataFN(PData));

            bufferedWriter.flush();

            bufferedWriter.close();

            outputStream.close();

            RC = httpURLConnection.getResponseCode();

            if (RC == HttpsURLConnection.HTTP_OK) {

                bufferedReader = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream()));

                stringBuilder = new StringBuilder();

                String RC2;

                while ((RC2 = bufferedReader.readLine()) != null){

                    stringBuilder.append(RC2);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
        return stringBuilder.toString();
    }

    private String bufferedWriterDataFN(HashMap<String, String> HashMapParams) throws UnsupportedEncodingException {

        stringBuilder = new StringBuilder();

        for (Map.Entry<String, String> KEY : HashMapParams.entrySet()) {
            if (check)
                check = false;
            else
                stringBuilder.append("&");

            stringBuilder.append(URLEncoder.encode(KEY.getKey(), "UTF-8"));

            stringBuilder.append("=");

            stringBuilder.append(URLEncoder.encode(KEY.getValue(), "UTF-8"));
        }

        return stringBuilder.toString();
    }

}

谢谢!

最佳答案

AsyncTask 中有一个内置的进度更新机制。要访问它,您所需要做的就是覆盖 AsyncTask 中的 onProgressUpdate。它获取进度作为参数,您可以使用该参数来更新 UI。考虑到 AsyncTask 在后台线程中运行,并且您需要使用进度更新 UI 线程,您可以从 doInBackground 调用 publishProgress使进度更新在 UI 线程上运行。

 protected void onProgressUpdate(String... progress) {
    progressDialog.setProgress(Integer.parseInt(progress[0]));
 }

关于java - 在文件上传期间显示带有百分比的水平进度条的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60599736/

相关文章:

java - 如何在 Scala 运行时获取泛型类型

java - 无法使用 try-catch 捕获 Java (Android) 异常

Java 进度条与应用程序代码同时工作

android - 水平进度条不更新其状态

java - MaltParser 实际上提供了返回解析树概率的选项吗?

java - 安卓工作室Java : Cannot resolve symbol override

android - 如何使用单个可聚焦 View 清除 fragment 中的焦点?

java - 如何处理 Runnable 生成的对象?

java - Android:如何更改 ProgressBar 的高度?

java - 如何在 for 循环中使用 getIndices ?