gpt4 book ai didi

android - 如何为 AsyncTask 线程集成进度条

转载 作者:行者123 更新时间:2023-11-29 20:56:23 24 4
gpt4 key购买 nike

我正在开发一个应用程序,它从用户那里获取数据并将其发布到网络服务。网络操作发生在 AsyncTask 线程中,有时 Web 服务需要大约 3 秒的时间来获取、处理和发送回复。我想要一个显示 Activity 进度的进度条。我搜索了一下,找到了一些指南,但其中一些是关于视频处理等的,我无法理解如何根据我的需要整合它。

贴出我的AsyncTask线程代码,请帮我整合进度条。

 private class DownloadOperation extends AsyncTask<Void, Void, String> {
String uname = "";
String email = "";
String password = "";
String confirmpass = "";
String phone = "";

@Override
protected void onPreExecute() {
super.onPreExecute();
// Get user defined values
uname = username.getText().toString();
email = mail.getText().toString();
password = pass.getText().toString();
confirmpass = cpass.getText().toString();
phone = phn.getText().toString();

//Progress Bar should go here?

}

@Override
protected String doInBackground(Void... params) {
String response = "";
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://rgbpallete.in/led/api/signup");
HttpEntity httpEntity = null;
HttpResponse httpResponse = null;
try {
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(4);
nameValuePairs.add(new BasicNameValuePair("uname", uname));
nameValuePairs.add(new BasicNameValuePair("pass", password));
nameValuePairs.add(new BasicNameValuePair("email", email));
nameValuePairs.add(new BasicNameValuePair("phone", phone));
httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpResponse = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
httpEntity = httpResponse.getEntity();
response = EntityUtils.toString(httpEntity);
return response;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(String jsonStr) {
super.onPostExecute(jsonStr);
Log.d("tag", "Result:\n" + jsonStr);
if (jsonStr != null) {
try{
JSONObject jsonObj = new JSONObject(jsonStr);
String message = jsonObj.getString("message");
boolean error = jsonObj.getBoolean("error");

error(error,message);

}
catch (JSONException e) {
e.printStackTrace();
}
}
else {
Log.e("ServiceHandler", "Couldn't get any data from the url");
}
}
}

这是布局signup.xml中进度条的.xml代码

<ProgressBar
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/progressBar"
android:layout_below="@+id/comfirmpass"
android:layout_centerHorizontal="true"
android:indeterminate="false" />

最佳答案

<强>1。不确定的进度:……

对于不确定的进度条,这样就够了

  1. onPreExecute 方法中显示它,并且
  2. 将其隐藏在 AsyncTask 扩展的 onPostExecute 方法中。

<强>2。确定进度:

为了给你的后台进程绑定(bind)一个确定的进度条,你需要调用publishProgress来自 doInBackground 方法。这反过来将通过 onProgressUpdate 通知 UI 线程,所以如果您也重写那个,您将能够显示正确的进度。

为此,您还需要从 HttpClient 方式切换到 UrlConnection 方式,并“手动”处理其输出。

关于android - 如何为 AsyncTask 线程集成进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583735/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com