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

来源:互联网 发布:ubuntu密码忘记了 编辑:程序博客网 时间:2024/06/06 01:27

适用情况简介

用户注册界面

客户端利用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
原创粉丝点击