利用HttpClient的POST方式发起带参数的请求时,点击注册按钮无反应状态分析

适用情况简介

用户注册界面

客户端利用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分钟后给你运行的结果了。

希望本文对大家有用….

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值