day5.12总结_网络访问(Client和connection)

 
一、安卓中进行基于HTTP协议的网络访问
 
(1)HttpClient (apache开发)
 
(2)HttpURLConnection(google在发布安卓时在Java基础上修改得到的)
 
(3)使用HC(HttpClient)/UC(HttpURLConnection)进行网络访问的基本步骤:
0. 申请权限 INTERNET访问权限
1. 任何网络访问的相关代码,必须在工    作线程中执行!
2. 创建HC/UC对象
3. 声明发起网络访问的方式(GET/POST)
4. 进行网络连接
5. 获得服务器响应的结果
6. 解析结果,提取需要的内容
7. 解析结果要提交到UI线程进行呈现
 
利用HttpClient的POST方式发起带参数的请求
利用POST方式发起请求,参数要放到请求实体中,并且在请求头中添加对实体中参数的说明。
 
添加说明:
post.setHeader("Content-Type", "application/x-www-form-urlencoded");
 
添加参数:
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);
 
登录界面参数提交
1)POST方式发起登录请求
2)要提交三个参数,参数应该放在请求实体中:
 loginname:用户帐号
 password:用户密码
 code:验证码图片上的字符串(不区分大小写)
3) 要设置2个头:
   第一个头用来描述请求实体中字符串
   "Content-Type" "application/x-www-form-urlecoded"
   第二个头用来提交sessionid
   "Cookie"   sid
在HttpClient中设置头:post.setHeader(key,value);
在HttpURLConnection中设置头:connection.setReqeustProperty(key ,value);
 
显示员工列表界面:ShowActivity
添加员工信息界面:EmpActivity
添加员工信息接口:
OnAddEmpFinishListener(){
 void onAddFinish(String result);
}
业务流程:
 
1)登录成功后,跳转到显示所有员工信息的ShowActivity界面。界面中使用一个ListView来显示所有已经添加过的员工信息
 
2)ShowActivity界面中需要提供一个“添加”菜单或按钮,点击后跳转到员工
 
ty,进行员工信息的录入和添加
 
3)添加员工信息的时候,需要将内容封装为一个Emp实体类,实体类中有四个属性:
String name;
double salary;
int age;
String gender;//男性为m,女性为f
 
4)添加员工信息采用时提供监听器OnAddEmpFinishListener,里面提供一个回调方法,当服务器添加完成后会调用该回调方法,并将添加结果作为参数传入。
 
要求:做第4步添加的时候,分别用HttpClient、HttpURLConnection两种方式来进行!

 

public class RegistActivity extends Activity {//注册

        

         EditText etName,etPassword,etRealname,etEmail;

         EmsBiz biz;

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_regist);

                   initView();

                   biz = new EmsBiz(this);

         }

 

         private void initView() {

                   etName = (EditText) findViewById(R.id.et_regist_name);

                   etPassword = (EditText) findViewById(R.id.et_regist_password);

                   etRealname = (EditText) findViewById(R.id.et_regist_realname);

                   etEmail = (EditText) findViewById(R.id.et_regist_mail);

         }

        

         public void backTo(View v){

                   //返回注册界面

                   finish();

         }

        

         public void registUser(View v){

                   User user = new User();

                   //判空

                   user.setName(etName.getText().toString());

                   user.setPassword(etPassword.getText().toString());

                   user.setRealname(etRealname.getText().toString());

                   user.setEmail(etEmail.getText().toString());

                  

                   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();

                                     }

                            }

                   });

         }

}

public class EmpActivity extends Activity {//添加员工

        

         EditText etName,etSalary,etAge;

         RadioGroup rgGender;

         EmsBiz biz;

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_emp);

                   biz = new EmsBiz(this);

                   initView();

         }

 

         private void initView() {

                   etName = (EditText) findViewById(R.id.et_emp_name);

                   etSalary = (EditText) findViewById(R.id.et_emp_salary);

                   etAge = (EditText) findViewById(R.id.et_emp_age);

                   rgGender = (RadioGroup) findViewById(R.id.rg_emp_gender);

         }

        

         public void addemp(View v){

                   //判空

                  

                   //判断数据类型(年龄,薪水应该为数字)

                  

                   Emp emp = new Emp();

                   emp.setName(etName.getText().toString());

                   if(rgGender.getCheckedRadioButtonId()==R.id.rb_emp_male){

                            emp.setGender("m");    单选项

                   }else{

                            emp.setGender("f");

                   }

                   emp.setSalary(Double.parseDouble(etSalary.getText().toString()));

                   emp.setAge(Integer.parseInt(etAge.getText().toString()));

                  

                   biz.addEmp(emp,new OnAddEmpFinishListener() {

                           

                            @Override

                            public void onAddFinish(String result) {

                                    

                                     Toast.makeText(EmpActivity.this, result, Toast.LENGTH_SHORT).show();

                                    

                            }

                   });

         }

        

         public void showemp(View v){

                   finish();

         }

}

public class MainActivity extends Activity {

         EditText etName,etPwd,etCode;

         ImageView ivVertify;

         EmsBiz biz;

         String sid;//用来保存服务生成验证码图片时的sessionid

         @Override

         protected void onCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                   biz = new EmsBiz(this);

                   initView();

         }

 

         private void initView() {

                   ivVertify = (ImageView) findViewById(R.id.iv_main_vertifycode);

                   ivVertify.setOnClickListener(new OnClickListener() {

                            @Override

                            public void onClick(View v) {

                                     refresh();

                            }

                   });

                   etName = (EditText) findViewById(R.id.et_main_name);

                   etPwd = (EditText) findViewById(R.id.et_main_password);

                   etCode = (EditText) findViewById(R.id.et_main_vertifycode);

         }

 

         @Override

         protected void onResume() {

                   super.onResume();

                   refresh();

         }

 

         private void refresh() {

                   biz.getVertify(new OnRefreshVertifyCodeListener() {

 

                            @Override

                            public void onRefreshFinished(Bitmap bitmap,String sessionid) {

                                     if(bitmap!=null)

                                               ivVertify.setImageBitmap(bitmap);

                                     sid = sessionid;

                                     Log.d("TAG", "sessionid= "+sid);

                            }

                   });

         }

 

         public void login(View v){

                   //应该加入判空

                   String loginname = etName.getText().toString();

                   String password = etPwd.getText().toString();

                   String code = etCode.getText().toString();

                   biz.login(loginname,password,code,sid,new OnLoginFinishListener() {

                            @Override

                            public void onLoginFinish(String result) {

                                     if(result!=null){

                                               if(result.contains("ok")){

                                                        Intent intent = new Intent(MainActivity.this,ShowActivity.class);

                                                        startActivity(intent);

                                                        finish();

                                               }else{

                                                        Toast.makeText(MainActivity.this, result, Toast.LENGTH_SHORT).show();

                                                        refresh();

                                                        etPwd.setText("");

                                                        etCode.setText("");

                                               }

                                     }else{

                                               Toast.makeText(MainActivity.this, "服务器错误", Toast.LENGTH_SHORT).show();

                                     }

                            }

                   });

         }

 

         public void regist(View v){

                   //跳转到“注册界面”

                   Intent intent  = new Intent(this,RegistActivity.class);

                   startActivity(intent);

         }

}

package com.tarena.ems.util;

public class EmsUtil {

        

         public static void registUser(Context context, final User user,

                            final OnRegistFinishListener listener) {

                   new AsyncTask<Void, Void, String>() {

 

                            @Override

                            protected String doInBackground(Void... params) {

 

                                     try {

                                               HttpClient client = new DefaultHttpClient();

                   HttpPost post = new HttpPost("http://192.168.12.229: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);

                            return line;

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                                     return null;

                            }

 

                            protected void onPostExecute(String result) {

                                     listener.onRegistFinish(result);

                            };

 

                   }.execute();

 

         }

 

         public static void registUser2(Context context,final User user, final OnRegistFinishListener listener){

                   //HttpURLConnection进行注册

                   new Thread(){

                            public void run() {

                                     try {

                            URL url = new URL("http://192.168.12.229:8080/ems/regist.do");

                            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                                               connection.setRequestMethod("POST");

                                               connection.setDoInput(true);//接收服务器响应的内容

                                               connection.setDoOutput(true);//要向服务器提交内容

                                               //在请求头中,为请求实体中的内容做说明

         connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                                               connection.connect();

                                               //客户端向服务器提交参数

                                               OutputStream out = connection.getOutputStream();

                                               PrintWriter pw = new PrintWriter(out, true);

//String params = "loginname="+user.getName()+"&password="+user.getPassword()+"&realname="+user.getRealname()+"&email="+user.getEmail();

                                               String params = getParams(user);

                                               pw.print(params);

                                               pw.close();

                                               //客户端获取服务器的响应内容

                                               InputStream in = connection.getInputStream();

                                               BufferedReader br = new BufferedReader(new InputStreamReader(in));

                                               final String result = br.readLine();

                                               br.close();

                                               //在主线程执行

                                               new Handler(Looper.getMainLooper()).post(new Runnable() {

 

                                                        @Override

                                                        public void run() {

                                                                 listener.onRegistFinish(result);

                                                        }

                                               });

 

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                            };

                   }.start();

 

         }

 

         protected static String getParams(User user) {//拼接字符串

                   Map<String,String> map = new HashMap<String, String>();

                   map.put("loginname", user.getName());

                   map.put("password", user.getPassword());

                   map.put("realname", user.getRealname());

                   map.put("email", user.getEmail());

 

                   StringBuilder sb = new StringBuilder();

 

                   for(Entry<String, String> entry:map.entrySet()){

                            sb.append(entry.getKey()).

                            append("=").

                            append(entry.getValue()).

                            append("&");

                   }

 

                   return sb.substring(0, sb.length()-1);

         }

//获取验证码

         public static void getVertify(final OnRefreshVertifyCodeListener listener) {

                   new AsyncTask<Void, Void, ValueObject>(){

 

                            @Override

                            protected ValueObject doInBackground(Void... params) {

                                     try {

                            HttpClient client = new DefaultHttpClient();

                            HttpGet get = new HttpGet("http://192.168.12.229:8080/ems/getCode.do");

                            HttpResponse resp = client.execute(get);

                            Header header = resp.getFirstHeader("Set-Cookie");

                            String value = header.getValue().split(";")[0];

                            HttpEntity entity = resp.getEntity();

                            InputStream is = entity.getContent();

                            Bitmap bitmap = BitmapFactory.decodeStream(is);

                            is.close();

                            ValueObject vo = new ValueObject();新建一个类来作为不同类型的容器

                            vo.setBitmap(bitmap);

                            vo.setSessionid(value);

 

                                               return vo;

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                                     return null;

                            }

                            protected void onPostExecute(ValueObject result) {

                                     listener.onRefreshFinished(result.getBitmap(),result.getSessionid());

                            };

                   }.execute();

         }

 

 

         public static void getVertify2(final OnRefreshVertifyCodeListener listener){

                   new Thread(){

                            public void run() {

                                     try {

                                               URL url = new URL("http://192.168.12.229:8080/ems/getCode.do");

                            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                                               connection.setRequestMethod("GET");

                                               connection.setDoInput(true);

                                               connection.connect();

 

                                     final String value = connection.getHeaderField("Set-Cookie").split(";")[0];

                                     InputStream is = connection.getInputStream();

                                     final Bitmap bitmap = BitmapFactory.decodeStream(is);

                                               is.close();

                                               new Handler(Looper.getMainLooper()).post(new Runnable() {

 

                                                        @Override

                                                        public void run() {

                                                                 listener.onRefreshFinished(bitmap,value);

                                                        }

                                               });

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                            };

                   }.start();

         }

 

         public static void login(final String loginname, final String password, final String code,final String sid,

                            final OnLoginFinishListener listener) {

                   new AsyncTask<Void, Void, String>(){

 

                            @Override

                            protected String doInBackground(Void... params) {

                                     try {

                            HttpClient client = new DefaultHttpClient();

                            HttpPost post = new HttpPost("http://192.168.12.229:8080/ems/login.do");

                            post.setHeader("Content-Type","application/x-www-form-urlencoded");

                            post.setHeader("Cookie",sid);

                            List<NameValuePair> parameters = new ArrayList<NameValuePair>();

                            parameters.add(new BasicNameValuePair("loginname", loginname));

                            parameters.add(new BasicNameValuePair("password", password));

                            parameters.add(new BasicNameValuePair("code", code));

                            HttpEntity entity = new UrlEncodedFormEntity(parameters);

                            post.setEntity(entity);

                            HttpResponse resp = client.execute(post);

                            String result = EntityUtils.toString(resp.getEntity());

                            return result;

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                                     return null;

                            }

                            protected void onPostExecute(String result) {

                                     listener.onLoginFinish(result);

                            };

                   }.execute();

 

 

         }

         public static void login2(final String loginname, final String password, final String code,final String sid,

                            final OnLoginFinishListener listener) {

                   new Thread(){

                            public void run() {

                                     try {

                                               URL url = new URL("http://192.168.12.229:8080/ems/login.do");

                                               HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                                               connection.setRequestMethod("POST");

                                              connection.setDoInput(true);

                                               connection.setDoOutput(true);

                                               connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                                               connection.setRequestProperty("Cookie", sid);

                                               connection.connect();

                                               OutputStream out = connection.getOutputStream();

                                               PrintWriter pw = new PrintWriter(out,true);

                                               pw.write(getParams(loginname,password,code));

                                               pw.close();

                                               InputStream in = connection.getInputStream();

                                               BufferedReader br = new BufferedReader(new InputStreamReader(in));

                                               final String result = br.readLine();

                                               br.close();

                                               new Handler(Looper.getMainLooper()).post(new Runnable() {

 

                                                        @Override

                                                        public void run() {

                                                                 listener.onLoginFinish(result);

 

                                                        }

                                               });

 

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                            };

                   }.start();

 

 

         }

 

         protected static String getParams(String loginname, String password,

                            String code) {

                   Map<String , String> map = new HashMap<String, String>();

                   map.put("loginname", loginname);

                   map.put("password", password);

                   map.put("code", code);

                   StringBuilder sb = new StringBuilder();

                   for(Entry<String, String> entry:map.entrySet()){

                            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");

                   }

                   return sb.substring(0,sb.length()-1);

         }

 

         public static void addEmp(final Emp emp, final OnAddEmpFinishListener listener) {

                   new AsyncTask<Void, Void, String>(){

 

                            @Override

                            protected String doInBackground(Void... params) {

                                     try {

                                               HttpClient client = new DefaultHttpClient();

                                               HttpPost post = new HttpPost("http://192.168.12.229:8080/ems/addEmp");

                                               post.setHeader("Content-Type","application/x-www-form-urlencoded");

                                               List<NameValuePair> parameters = new ArrayList<NameValuePair>();

                                               parameters.add(new BasicNameValuePair("name", emp.getName()));

                                               parameters.add(new BasicNameValuePair("salary",String.valueOf(emp.getSalary())));

                                               parameters.add(new BasicNameValuePair("age", String.valueOf(emp.getAge())));

                                               parameters.add(new BasicNameValuePair("gender", emp.getGender()));

                                               HttpEntity entity = new UrlEncodedFormEntity(parameters);

                                               post.setEntity(entity);

                                               HttpResponse resp = client.execute(post);

                                               String result = EntityUtils.toString(resp.getEntity());

                                               return result;

 

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                                     return null;

                            }

                            protected void onPostExecute(String result) {

                                     listener.onAddFinish(result);

                            };

                   }.execute();     

 

         }

         public static void addEmp2(final Emp emp, final OnAddEmpFinishListener listener) {

 

                   new Thread(){

                            public void run() {

                                     try {

                                               URL url = new URL("http://192.168.12.229:8080/ems/addEmp");

                                               HttpURLConnection connection = (HttpURLConnection) url.openConnection();

                                               connection.setRequestMethod("POST");

                                               connection.setDoInput(true);

                                               connection.setDoOutput(true);

                                               connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

                                               connection.connect();

                                               OutputStream out = connection.getOutputStream();

                                               PrintWriter pw = new PrintWriter(out,true);

                                               pw.write(getParams(emp));

                                               pw.close();

 

                                               InputStream in = connection.getInputStream();

                                               BufferedReader br = new BufferedReader(new InputStreamReader(in));

                                               final String result = br.readLine();

                                               br.close();

 

                                               new Handler(Looper.getMainLooper()).post(new Runnable() {

 

                                                        @Override

                                                        public void run() {

                                                                 listener.onAddFinish(result);

                                                        }

                                               });

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                            };

                   }.start();

         }

 

         protected static String getParams(Emp emp) {

                   Map<String , String> map = new HashMap<String, String>();

                   map.put("name", emp.getName());

                   map.put("salary", String.valueOf(emp.getSalary()));

                   map.put("age", String.valueOf(emp.getAge()));

                   map.put("gender",emp.getGender());

                   StringBuilder sb = new StringBuilder();

                   for(Entry<String, String> entry:map.entrySet()){

                            sb.append(entry.getKey()).append("=").append(entry.getValue()).append("&");

                   }

                   return sb.substring(0,sb.length()-1);

         }

 

         public static void getAllEmp(final OnLoadAllEmpFinishListener listener) {

                   new AsyncTask<Void, Void, List<Emp>>(){

 

                            @Override

                            protected List<Emp> doInBackground(Void... params) {

                                     try {

                                               Log.i("tag", "1");

                                               URL url = new URL("http://192.168.12.229:8080/ems/listEmp"); 

                                               HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

                                               InputStream is = conn.getInputStream(); 

                                               ByteArrayOutputStream outStream = new ByteArrayOutputStream(); 

                                    byte[] data = new byte[1024]; 

                                    int len = 0;

                                    while ((len = is.read(data)) != -1) { 

                                        outStream.write(data, 0, len); 

                                    }

                                    byte[] bytes = outStream.toByteArray();

                                    JSONArray array = new JSONArray(new String(data));

                                    List<Emp> emps= new ArrayList<Emp>();

                                    for (int i = 0; i < array.length(); i++) {

                                             Emp emp = new Emp();

                                                        JSONObject item = array.getJSONObject(i); 

                                                        emp.setName(item.getString("name"));

                                                        emp.setSalary(Integer.valueOf(item.getString("salary")));

                                                        emp.setAge(Integer.valueOf(item.getString("age")));

                                                        emp.setGender(item.getString("gender"));

                                                        Log.i("tag", "emp="+emp.toString());

                                                        emps.add(emp);

                                    }

                                              

                                               Log.i("tag", "emps="+emps.toString());

                                               Log.i("tag", "2");

                                               is.close();

                                               return emps;

 

                                     } catch (Exception e) {

                                               e.printStackTrace();

                                     }

                                     return null;

                            }

                            protected void onPostExecute(List<Emp> result) {

                                     Log.i("tag", "3");

                                     listener.onfinish(result);

                            };

 

                   }.execute();

 

         }

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值