我正在使用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;
}
}
答案 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;
}