作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个应用程序,它从用户那里获取数据并将其发布到网络服务。网络操作发生在 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。不确定的进度:……
对于不确定的进度条,这样就够了
onPreExecute
方法中显示它,并且AsyncTask
扩展的 onPostExecute
方法中。<强>2。确定进度:
为了给你的后台进程绑定(bind)一个确定的进度条,你需要调用publishProgress
来自 doInBackground
方法。这反过来将通过 onProgressUpdate
通知 UI 线程,所以如果您也重写那个,您将能够显示正确的进度。
为此,您还需要从 HttpClient 方式切换到 UrlConnection 方式,并“手动”处理其输出。
关于android - 如何为 AsyncTask 线程集成进度条,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583735/
我是一名优秀的程序员,十分优秀!