适用情况简介
用户注册界面
客户端利用POST方式发起请求,要实现注册时,感觉程序没什么错误,点击下方的“注册”按钮,程序中使用了Toast,但并没有看到“Toast”提示,为什么?
项目分类简介
这是本人的项目列表,方便大家理解代码
代码
下面是我写的代码,为方便找错,我在程序的各个类中加入了Log。
RegistActivity类中部分代码
public void registUser(View v) {
User user=new User();
user.setEmail(etEmail.getText().toString());
user.setName(etName.getText().toString());
user.setPassword(etPassword.getText().toString());
user.setRealname(etRealname.getText().toString());
Log.d("TAG", "RegistActivity中的registUser:执行了");
biz.registUser(user,new onRegistFinishListener() {
@Override
public void onRegistFinish(String result) {
if(result==null){
Toast.makeText(RegistActivity.this,
"服务器异常请稍后重试", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(RegistActivity.this,
result, Toast.LENGTH_SHORT).show();
}
}
});
}
EmsBiz类中部分代码
public void registUser(User user,onRegistFinishListener listener) {
Log.d("TAG", "EmsBiz:执行了");
EmsUtli.registUser(context,user,listener);
}
EmsUtil中的部分代码
public static void registUser(Context context, final User user,
final onRegistFinishListener listener) {
Log.d("TAG", "EmsUtil:执行了");
new AsyncTask<Void, Void, String>(){
@Override
protected String doInBackground(Void... params) {
try {
Log.d("TAG", "doInBackground:执行了");
HttpClient client=new DefaultHttpClient();
HttpPost post=new HttpPost("http://172.88.134.136:8080/ems/regist.do");
//添加一个请求头,对请求实体中的参数做一个说明
post.setHeader("Content-Type","application/x-www-form-urlencoded");
//在post中添加请求参数
//请求参数会添加在请求实体中
List<NameValuePair> parameters=new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("loginname", user.getName()));
parameters.add(new BasicNameValuePair("password", user.getPassword()));
parameters.add(new BasicNameValuePair("realname", user.getRealname()));
parameters.add(new BasicNameValuePair("email", user.getEmail()));
HttpEntity entity=new UrlEncodedFormEntity(parameters);
post.setEntity(entity);
HttpResponse resp=client.execute(post);
HttpEntity respEntity = resp.getEntity();
String line=EntityUtils.toString(respEntity);
Log.d("TAG", "doInBackground:line执行了");
return line;
} catch (Exception e) {
e.printStackTrace();
}
Log.d("TAG", "doInBackground:null执行了");
return null;
}
protected void onPostExecute(String result) {
Log.d("TAG", "onPostExecute:执行了");
listener.onRegistFinish(result);
};
}.execute();
}
结果分析
代码并没有错,可点击注册按钮,就是没反应,还不提示错误。
1. 点击“注册”按钮时,Log提示:
程序到doInBackground就不执行了
注意看代码执行的时间,与下边对比
2. 奇迹出现了
注意对比时间
在傻傻的找了三分钟错误之后,Log的提示又出现了,原来是客户端POST注册时,需要的时间太长,3分钟后给你运行的结果了。
希望本文对大家有用….