我正试图让我的httpclient使用asynctask,包括progressbar。
我已经有此异步任务的代码:

private class httpClient extends AsyncTask<String, Boolean, String> {

private HttpClient httpClient = getHttpClient();

@Override
protected String doInBackground(String... params) {
    publishProgress(true);
    // Do the usual httpclient thing to get the result
    return null;
}

@Override
protected void onProgressUpdate(Boolean... progress) {
    // line below coupled with
    //    getWindow().requestFeature(Window.FEATURE_INDETERMINATE_PROGRESS)
    //    before setContentView
    // will show the wait animation on the top-right corner
    AndroidLogin.this.setProgressBarIndeterminateVisibility(progress[0]);
}

@Override
protected void onPostExecute(String result) {
    publishProgress(false);
    // Do something with result in your activity
}

}

我的问题是如何在asynctask中正确地放置下面的代码,progressbar也在工作。
有人能帮忙吗?
/******* INPUT USERNAME AND PASSWORD *******/
        EditText uname = (EditText)findViewById(R.id.txt_username); // user input through EditText
        String username = uname.getText().toString();
        EditText pword = (EditText)findViewById(R.id.txt_password); // password input through EditText
        String password = pword.getText().toString();

/******* INSTANTIATE THE CUSTOM HTTPCLIENT *******/
        HttpClient httpClient = getHttpClient();
        HttpPost request = new HttpPost("https://xxx");

        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
        nameValuePairs.add(new BasicNameValuePair("usr_name", username));
        nameValuePairs.add(new BasicNameValuePair("usr_password", password));
        request.setEntity(new UrlEncodedFormEntity(nameValuePairs));

/******* EXECUTE HTTPCLIENT *******/
        try
        {
        HttpResponse response = httpClient.execute(request);

/******* READ CONTENT IN BUFFER *******/
        InputStream inputStreamActivity = response.getEntity().getContent();
        BufferedReader reader = new BufferedReader(new InputStreamReader(inputStreamActivity));
        StringBuilder sb = new StringBuilder();
        String line = null;

        while ((line = reader.readLine()) != null) {
        sb.append(line + "\n");
        }
/******* CLOSE CONNECTION AND STREAM *******/
        System.out.println(sb);
            inputStreamActivity.close();
        httpClient.getConnectionManager().shutdown();

最佳答案

我找到了解决办法。
我需要将文本字段包含到asynctask中,以避免出现异常。

EditText uname = (EditText)findViewById(R.id.txt_username);
EditText pword = (EditText)findViewById(R.id.txt_password);

我决定使用progressdialog而不是progressbar,需要添加以下内容:
//Create a Progressdialog
ProgressDialog pd = new ProgressDialog(MyApp.this);

@Override
    protected void onPreExecute()
    {
        //Set the Progressdialog
        pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        pd.setMessage("Getting data....");
                 }

 @Override
    protected void onProgressUpdate(Integer... args) {
           //Update the Progressdialog
           pd.setProgress(args[0]);
           }

  @Override
    protected void onPostExecute(String result) {
        //Dismiss Progressdialog
        pd.dismiss();
                 }

就是这样。

07-24 09:47
查看更多