目标
我要做的是,查询我的值传递以查询我的数据库并将结果传递给我的列表视图,但是在列表视图加载之前,我希望有一个进度对话框显示项目下载的进度。
我做了什么
查询我的数据库,在更新列表视图之前显示进度对话框
问题
我遇到的问题是进展尚未公布。我的连接长度为-1。而且我相信这是我的问题
请参阅下面的代码。尽管有阅读,我并不完全精通发布更新,所以如果我能得到一些帮助,我想要。 感谢
public class StudentAsynTask extends AsyncTask<String, Integer, Boolean> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressD = new ProgressDialog(retrievrSData.this);
progressD.setMessage("Retrieving Results");
progressD.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressD.setIndeterminate(true);
progressD.setProgress(0);
progressD.show();
}
@Override
protected Boolean doInBackground(String... params) {
try {
URL url = new URL(params[0]);
URLConnection conection = url.openConnection();
conection.connect();
// THIS IS -1
int fileLength = conection.getContentLength();
HttpParams param = new BasicHttpParams();
ArrayList<NameValuePair> inputArguments = new ArrayList<NameValuePair>();
if (firstName.equals("''") && !lastname.equals("''")) {
inputArguments.add(new BasicNameValuePair("l_name", lastname));
} else if (!firstName.equals("''") && lastname.equals("''")) {
inputArguments.add(new BasicNameValuePair("f_name", firstName));
} else if (!firstName.equals("''") && !lastname.equals("''")) {
inputArguments.add(new BasicNameValuePair("f_name", firstName));
inputArguments.add(new BasicNameValuePair("l_name", lastname));
}
HttpClient client = new DefaultHttpClient(param);
HttpPost request = new HttpPost("http:// technologies.com/Das/getst.php");
request.setHeader("Content-Type", "application/x-www-form-urlencoded");
request.setEntity(new UrlEncodedFormEntity(inputArguments, "UTF-8"));
HttpResponse httpResponse = (HttpResponse) client.execute(request);
int status = httpResponse.getStatusLine().getStatusCode();
if (status == 404) {
Intent intent = new Intent();
setResult(404, intent);
finish();
}
if (status == 200) {
if (fileLength > 0) {
publishProgress((int) (5 * 100 / fileLength));
}
HttpEntity entity = httpResponse.getEntity();
String data = EntityUtils.toString(entity);
以下是进度更新代码。
@Override
protected void onProgressUpdate(Integer... progress) {
super.onProgressUpdate(progress);
// if we get here, length is known, now set indeterminate to false
progressD.setIndeterminate(false);
progressD.setMax(100);
progressD.setProgress(progress[0]);
}
答案 0 :(得分:0)
doInBackground
中,您必须检查您的工作是否正确。
如果你做得好,那么你必须将{true}传递给onProgressUpdate
。如果没有,您必须将false传递给onProgressUpdate
。
onProgressUpdate的结构必须如下:
onProgressUpdate(boolean flag)
对于progressD(0,100)的增加值,您必须在doInBackground方法中执行此操作。
if (status == 404) {
intValueOfProgress = 0;
}
if (status == 200) {
intValueOfProgress = 100;
}