在Android中完成后台执行后,ProgressBar未停止

时间:2014-02-18 08:26:25

标签: java android asynchronous

我正在使用Android技术。在我的应用程序中,我从Web服务获取数据,我使用A sync Task来使用Web服务。它在Toast上正确显示数据,即true或false但是我的进度条不断移动它在后台任务完成执行时没有停止我在onPostExecute()中调用了dismiss方法。但它没有关闭进度条。它开始调用web服务但是进度条没有被破坏。

你能告诉我在我的代码中我做错了什么。请解决我的问题..

我在这里附上源代码

异步任务

public class MyTask extends AsyncTask<String,Void,String>
    {
        @Override
        protected void onPostExecute(String result) 
        {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            pd.dismiss();
            Toast.makeText(getApplicationContext(), ""+result,Toast.LENGTH_LONG).show();

        }
        @Override
        protected void onPreExecute() 
        {
            // TODO Auto-generated method stub
            super.onPreExecute();
            pd=new ProgressDialog(MainActivity.this);
            pd.setMessage("Please Wait");
            pd.setCancelable(false);
            pd.setIndeterminate(false);
            pd.show();
        }
        @Override
        protected String doInBackground(String... arg0) 
        {
            // TODO Auto-generated method stub
            v=new Validate();
            String result;
            result=v.SendParam(url,user,pass);
            return result;
        }
    }

这里是id Validate.java代码

class Validate 
{
    ArrayList<NameValuePair> namevaluepair;
    InputStream is;
    String res;
    public String SendParam(String url,String username,String password)
    {

        try
        {
        HttpClient client=new DefaultHttpClient();
        HttpPost post=new HttpPost(url);
        // add parameter here
        namevaluepair=new ArrayList<NameValuePair>();
        namevaluepair.add(new BasicNameValuePair("id",username));
        namevaluepair.add(new BasicNameValuePair("password",password));
        post.setEntity(new UrlEncodedFormEntity(namevaluepair));
        HttpResponse response=client.execute(post);
        HttpEntity entity=response.getEntity();
        is=entity.getContent();
        }
        catch(Exception e)
        {
            Log.d("Httpconnection","error",e);  
        } 
        // read response from
        try
        {

             BufferedReader reader=new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
             StringBuilder builder=new StringBuilder();
             String line;
              while((line=reader.readLine())!=null)
              {
                  builder.append(line+"\n");

              }
              is.close();
              res=builder.toString();
        }
        catch(Exception e)
        {
            Log.d("reading Input Stream","",e);
        }
        return res;


    }

}

2 个答案:

答案 0 :(得分:0)

super.onPostExecute(result);

尝试删除并执行。希望它有效。

答案 1 :(得分:0)

您的代码应该可以正常工作(对话框应该没有问题) 但是我猜你的sendParam方法会抛出一个错误,所以没有达到onPostExecute方法。在代码中将doInBackground替换为:

@Override
protected String doInBackground(String... arg0) {
    try {
        v=new Validate();
        String result;
        result=v.SendParam(url,user,pass);
        return result;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}