Android 四种Http协议详解

来源:互联网 发布:淘宝旅行网客服 编辑:程序博客网 时间:2024/05/16 10:22
第一、写服务方法
package com.geek.http.service;


import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;


import android.content.Context;
import android.util.Log;


import com.fasterxml.jackson.databind.ObjectMapper;
import com.geek.http.entity.Users;


public class HttpActivity {
public Context context;


public HttpActivity(Context context) {
this.context = context;
}


// httpUrlConnection的Get方法(Java只有Java的JDK才有)
public Users httpUrlConnectionGet(String path, Map<String, String> params)
throws Exception {
// 创建一个users对象
Users users = null;
// 创建一个StringBuffer实例来拼接请求路径
StringBuffer pathname = new StringBuffer(path);
pathname.append("?");
for (String key : params.keySet()) {
pathname.append(key);
pathname.append("=");
pathname.append(params.get(key));
pathname.append("&");
}
// 把拼接好的请求路径的最后一个字符("&")截取掉
pathname.deleteCharAt(pathname.length() - 1);
// 创建请求路径
URL url = new URL(pathname.toString());
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置连接超时时长
conn.setConnectTimeout(5000);
// 设置请求方式
conn.setRequestMethod("GET");
// 请求成功(相应吗==200)
if (conn.getResponseCode() == 200) {
// 获得服务器返回来的字节输入流,然后把他转换成字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
// 读一行
String nnem = br.readLine();
Log.d("TAG", "" + nnem);
// 判断是否为空
if (nnem != null) {


ObjectMapper om = new ObjectMapper();
// 把nnem转成实体
users = om.readValue(nnem, Users.class);
}
}
return users;
}


// httpUrlConnection的Get方法(Java只有Java的JDK才有)
public Users httpUrlConnectionpost(String path, Map<String, String> params)
throws Exception {
Users users = null;
// 创建一个StringBuffer实例来拼接属性
StringBuffer pathname = new StringBuffer();


for (String key : params.keySet()) {
pathname.append(key);
pathname.append("=");
pathname.append(params.get(key));
pathname.append("&");
}
// 把拼接好的属性的最后一个字符("&")截取掉
String canshu = pathname.deleteCharAt(pathname.length() - 1).toString();
// 创建请求路径
URL url = new URL(path);
// 打开连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
// 设置请求方式
conn.setRequestMethod("POST");
// 将参数转换成字节数组
byte[] entity = canshu.getBytes();
// 设置允许对外输出数据
conn.setDoOutput(true);
// 对外写出实体数据
OutputStream os = conn.getOutputStream();
os.write(entity);
// 请求成功(相应吗==200)
if (conn.getResponseCode() == 200) {
// 获得服务器返回来的字节输入流,然后把他转换成字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(
conn.getInputStream()));
// 读一行
String nnem = br.readLine();
Log.d("TAG", "" + nnem);
// 判断是否为空
if (nnem != null) {
ObjectMapper om = new ObjectMapper();
// 把nnem转成实体
users = om.readValue(nnem, Users.class);
}
}
return users;
}


// httpclien的Get请求(Android中独有)
public Users httpClientGet(String path, Map<String, String> params)
throws Exception {
Users users = null;
// 创建一个StringBuffer实例来拼接请求路径
StringBuffer pathname = new StringBuffer(path);
pathname.append("?");
for (String key : params.keySet()) {
pathname.append(key);
pathname.append("=");
pathname.append(params.get(key));
pathname.append("&");


}
// 把拼接好的请求路径的最后一个字符("&")截取掉
String pname = pathname.deleteCharAt(pathname.length() - 1).toString();
// 创建一个浏览器
HttpClient httpClient = new DefaultHttpClient();
// 创建一个HttpGet请求对象
HttpGet request = new HttpGet(pname);
// 执行请求(得到相应对象)
HttpResponse httpResponse = httpClient.execute(request);
// 得到状态行获得状态码(如果==200就表示请求成功)
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 得到相应的实体
HttpEntity httpEntity = httpResponse.getEntity();
// 得到输出流
InputStream is = httpEntity.getContent();
// 获得服务器返回来的字节输入流,然后把他转换成字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 读一行
String rlb = br.readLine();
if (rlb != null) {
ObjectMapper om = new ObjectMapper();
// 把rlb转成实体
users = om.readValue(rlb, Users.class);
}
}


return users;
}


// httpclien的Post请求(Android中独有)
public Users httpClientPost(String path, Map<String, String> params)
throws Exception {
Users users = null;
// 创建浏览器
HttpClient httpClient = new DefaultHttpClient();
// 创建HttpPost请求
HttpPost request = new HttpPost(path);
// 请求参数
List<NameValuePair> parname = new ArrayList<NameValuePair>();
for (String key : params.keySet()) {
NameValuePair nvp = new BasicNameValuePair(key, params.get(key));
parname.add(nvp);
}
// 创建请求实体
UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parname);
// 设置请求实体
request.setEntity(entity);
// 执行请求(得到相应对象)
HttpResponse httpResponse = httpClient.execute(request);
// 得到状态行获得状态码(如果==200就表示请求成功)
if (httpResponse.getStatusLine().getStatusCode() == 200) {
// 得到相应实体
HttpEntity he = httpResponse.getEntity();
// 得到输入流
InputStream is = he.getContent();
// 获得服务器返回来的字节输入流,然后把他转换成字符输入流
BufferedReader br = new BufferedReader(new InputStreamReader(is));
// 读一行
String shu = br.readLine();
if (shu != null) {
ObjectMapper om = new ObjectMapper();
// 把shu转成实体
users = om.readValue(shu, Users.class);
}
}
return users;
}
}




第二、调用方法
package com.geek.http;


import java.util.HashMap;
import java.util.Map;


import com.geek.http.entity.Users;
import com.geek.http.service.HttpActivity;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;


public class MainActivity extends Activity {
/** Called when the activity is first created. */
EditText etname, etpwd;
public HttpActivity httpActivity = null;


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
etname = (EditText) findViewById(R.id.name);
etpwd = (EditText) findViewById(R.id.pwd);


}


// http://localhost:8080/SSH001/loginAction!loginForAndroidClient.action
public void denglu(View view) {
System.out.println("----------------");
String http = "http://10.0.2.2:8080/SSH001/loginAction!loginForAndroidClient.action";
Map<String, String> map = new HashMap<String, String>();
map.put("users.name", etname.getText().toString());
map.put("users.pwd", etpwd.getText().toString());
httpActivity = new HttpActivity(this);
Users user = null;
try {
// user = httpActivity.httpUrlConnectionGet(http, map);
// user=httpActivity.httpUrlConnectionpost(http, map);
// user=httpActivity.httpClientGet(http, map);
user = httpActivity.httpClientPost(http, map);
if (user != null) {
Toast.makeText(this, "登陆成功/n", 2000).show();
} else {
Toast.makeText(this, "登陆失败", 2000).show();
Toast.makeText(this, "登陆失败", 1000).show();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


}


}




第三、创建一个服务器
package com.geek.server.action;


import java.io.IOException;


import org.apache.struts2.ServletActionContext;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;


import com.geek.server.entity.Users;
import com.geek.server.service.UsersService;
import com.opensymphony.xwork2.ActionSupport;


public class LoginAction extends ActionSupport{
     private Users users; 
private UsersService usersService;
         public String login(){
        System.out.println("进来了");
        System.out.println(users.getName());
        System.out.println(users.getPwd());
        users= usersService.login(users);
        return null;
         }
public Users getUsers() {
return users;
}
public void setUsers(Users users) {
this.users = users;
}
public UsersService getUsersService() {
return usersService;
}
public void setUsersService(UsersService usersService) {
this.usersService = usersService;
}

public void loginForAndroidClient(){
users=usersService.login(users);
try {
if(users!=null){
               ObjectMapper mapper = new ObjectMapper();
                
//ServletActionContext.getResponse().getWriter().write(mapper.writeValueAsString(users));
             
System.out.println(mapper.writeValueAsString(users));
}else {
//ServletActionContext.getResponse().getWriter().write("");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
        
}
0 0
原创粉丝点击