Java 在文件上传过程中显示带有百分比的水平进度条的最佳方式?
我是android新手,正在尝试一个简单的图像上传应用程序。我能够用asynctask完成所有上传,并且工作正常。我目前正在显示简单的进度对话,一切都很好,但我想用进度条显示百分比。我正在使用asynctask进行上传,并没有打算显示百分比。谁能帮我做这件事 我的代码如下Java 在文件上传过程中显示带有百分比的水平进度条的最佳方式?,java,android,progress-bar,Java,Android,Progress Bar,我是android新手,正在尝试一个简单的图像上传应用程序。我能够用asynctask完成所有上传,并且工作正常。我目前正在显示简单的进度对话,一切都很好,但我想用进度条显示百分比。我正在使用asynctask进行上传,并没有打算显示百分比。谁能帮我做这件事 我的代码如下 public void UploadImageToServer(){ FixBitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream
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调用该方法。它不一定是一个字符串,它可以是一个你定义的整数,我只是从我的一个项目中复制了它,我把它作为一个字符串。我会检查你代码中的逻辑,看看是否可以更具体一些,这对我很有帮助。谢谢