加载到listview时更新进度

时间:2015-10-05 05:59:06

标签: android listview

目标

我要做的是,查询我的值传递以查询我的数据库并将结果传递给我的列表视图,但是在列表视图加载之前,我希望有一个进度对话框显示项目下载的进度。

我做了什么

查询我的数据库,在更新列表视图之前显示进度对话框

问题

我遇到的问题是进展尚未公布。我的连接长度为-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]);
    }

1 个答案:

答案 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;
}