day5.12总结_网络访问(Client和connection)
来源:互联网 发布:詹姆斯哈登联盟数据 编辑:程序博客网 时间:2024/06/03 16:14
一、安卓中进行基于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();
}
}
- day5.12总结_网络访问(Client和connection)
- day5.10总结_短信和电话拦截
- day5.03总结_友录_优化(异步和缓存和回调)
- day5.19总结_音乐播放器_页面更新和播放
- day5.17总结_加载图片(圆圈和压缩、一级、二级缓存)
- DAY5总结
- day5.23总结_Socket(单聊和群聊)
- 网络编程_总结
- Oracle day5 总结
- 多线程学习总结 day5
- 夏令营day5总结
- day5-java&oracle总结
- day5上午总结
- day5下午总结
- 网络编程client和server
- c#网络访问总结
- Client/Server Application Connection
- NOIP夏令营day5课程总结
- 微信公众平台 开始开发(服务器配置)
- day5.10总结_短信和电话拦截
- 读《悉尼》后感
- hdu 1853/3488/3435 最小费用最大流 环覆盖图
- android中不同类型任务栈的使用
- day5.12总结_网络访问(Client和connection)
- Lua学习笔记Day4-Lua实现链表
- jquery mobile的表单元素
- 基于JAVA反射的Spring原理----例子
- LeetCode: Best Time to Buy and Sell Stock
- 如何自定义圆弧按钮?
- Android 图片合成Xfermode示例
- Spark中组件Mllib的学习7之ALS隐式转换训练的model来预测数据
- java32java当中的IO(一)