Java 在文件上传过程中显示带有百分比的水平进度条的最佳方式?

Java 在文件上传过程中显示带有百分比的水平进度条的最佳方式?,java,android,progress-bar,Java,Android,Progress Bar,我是android新手,正在尝试一个简单的图像上传应用程序。我能够用asynctask完成所有上传,并且工作正常。我目前正在显示简单的进度对话,一切都很好,但我想用进度条显示百分比。我正在使用asynctask进行上传,并没有打算显示百分比。谁能帮我做这件事 我的代码如下 public void UploadImageToServer(){ FixBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream

我是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();
    }

}
public void UploadImageToServer(){
压缩(Bitmap.CompressFormat.JPEG,100,byteArrayOutputStream);
byteArray=byteArrayOutputStream.toByteArray();
ConvertImage=Base64.encodeToString(byteArray,Base64.DEFAULT);
类AsyncTaskUploadClass扩展了AsyncTask{
@凌驾
受保护的void onPreExecute(){
super.onPreExecute();
progressDialog=progressDialog.show(MainActivity.this,“图像正在上载”,“请稍候”,false,false);
}
@凌驾
受保护的void onPostExecute(字符串string1){
super.onPostExecute(string1);
progressDialog.disclose();
Toast.makeText(MainActivity.this,string1,Toast.LENGTH_LONG.show();
}
@凌驾
受保护字符串doInBackground(无效…参数){
ImageProcessClass ImageProcessClass=新的ImageProcessClass();
HashMap HashMapParams=新HashMap();
HashMapParams.put(ImageTag,GetImageNameFromEditText);
HashMapParams.put(ImageName,ConvertImage);
字符串FinalData=imageProcessClass.ImageHttpRequest(URL,HashMapParams);
返回最终数据;
}
}
AsyncTaskUploadClass AsyncTaskUploadClassOBJ=新的AsyncTaskUploadClass();
AsyncTaskUploadClassOBJ.execute();
}
公共类ImageProcessClass{
公共字符串ImageHttpRequest(字符串请求URL、HashMap PData){
StringBuilder StringBuilder=新的StringBuilder();
试一试{
url=新url(请求url);
httpURLConnection=(httpURLConnection)url.openConnection();
httpURLConnection.setReadTimeout(20000);
httpURLConnection.setConnectTimeout(20000);
httpURLConnection.setRequestMethod(“POST”);
httpURLConnection.setDoInput(true);
httpURLConnection.setDoOutput(true);
outputStream=httpURLConnection.getOutputStream();
bufferedWriter=新的bufferedWriter(
新的OutputStreamWriter(outputStream,“UTF-8”);
write(bufferedWriterDataFN(PData));
bufferedWriter.flush();
bufferedWriter.close();
outputStream.close();
RC=httpURLConnection.getResponseCode();
if(RC==HttpsURLConnection.HTTP\u确定){
bufferedReader=新的bufferedReader(新的InputStreamReader(httpURLConnection.getInputStream());
stringBuilder=新的stringBuilder();
字符串RC2;
而((RC2=bufferedReader.readLine())!=null){
stringBuilder.append(RC2);
}
}
}捕获(例外e){
e、 printStackTrace();
}
返回stringBuilder.toString();
}
私有字符串bufferedWriterDataFN(HashMap HashMapParams)引发UnsupportedEncodingException{
stringBuilder=新的stringBuilder();
for(Map.Entry键:HashMapParams.entrySet()){
如果(检查)
检查=错误;
其他的
stringBuilder.append(“&”);
追加(URLEncoder.encode(KEY.getKey(),“UTF-8”);
stringBuilder.append(“=”);
追加(URLEncoder.encode(KEY.getValue(),“UTF-8”);
}
返回stringBuilder.toString();
}
}

谢谢

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

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

什么是字符串进度,从哪里可以获得它的价值?你能用我的代码举例吗?谢谢@rajrathod这是进入publishProgress()方法的参数,您可以从doInBackground调用该方法。它不一定是一个字符串,它可以是一个你定义的整数,我只是从我的一个项目中复制了它,我把它作为一个字符串。我会检查你代码中的逻辑,看看是否可以更具体一些,这对我很有帮助。谢谢