您的位置:首页 > 理论基础 > 计算机网络

Android开发之从网络(Intent)获取和发送数据

2014-04-18 22:42 399 查看
//
//
public class DataService {

/**
* 通过get请求提交数据到服务器
*
* @param path
*            服务器servlet的地址
* @param name
*            用户名
* @param password
*            密码
* @return 服务器返回回来的string数据
*/
// get 一次提交的数据量小于4K
public static String sendDataByGet(String path, String name, String password)
throws Exception {
String param1 = URLEncoder.encode(name);
String param2 = URLEncoder.encode(password);
URL url = new URL(path + "?name=" + param1 + "&password=" + param2);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

conn.setRequestMethod("GET");
conn.setReadTimeout(5000);//设置超时时间为5s
// 获取服务器返回的流信息
InputStream is = conn.getInputStream();
byte[] result = StreamTool.getBytes(is);

return new String(result);
}

/**
* 采用post的方式 提交数据到服务器
*
* @param path
*            服务器servlet的地址
* @param name
*            用户名
* @param password
*            密码
* @return 服务器返回的数据信息
* @throws Exception
*/
// post 可以提交比较大的数据
public static String sendDataByPost(String path, String name,
String password) throws Exception {
String param1 = URLEncoder.encode(name);
String param2 = URLEncoder.encode(password);
URL url = new URL(path);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();

String data = "name=" + param1 + "&password=" + param2;

conn.setRequestMethod("POST");
conn.setConnectTimeout(5000);
// 设置 http协议可以向服务器写数据
conn.setDoOutput(true);
// 设置http协议的消息头
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");
conn.setRequestProperty("Content-Length", data.length() + "");
// 把准备好的data数据写给服务器
OutputStream os = conn.getOutputStream();
os.write(data.getBytes());
// httpurlconnection 底层实现 outputstream 是一个缓冲输出流
// 只要我们获取任何一个服务器返回的信息 , 数据就会被提交给服务器 , 得到服务器返回的流信息
int code = conn.getResponseCode();
if (code == 200) {
InputStream is = conn.getInputStream();
byte[] result = StreamTool.getBytes(is);
return new String(result);
} else {
throw new IllegalStateException("服务器状态异常");
}
}

/**
* httpclient 浏览器的简单包装
* new HttpClient 就相当于得到了一个浏览器
*/
public static String sendDataByHttpClientGet (String path , String name,String password) throws Exception{

//1. 获取到一个浏览器的实例
HttpClient client = new DefaultHttpClient();
//2. 准备请求的地址
String param1 = URLEncoder.encode(name);
String param2 = URLEncoder.encode(password);
HttpGet httpGet = new HttpGet(path + "?name=" + param1 + "&password=" + param2);

HttpResponse  ressponse = client.execute(httpGet);
int code = ressponse.getStatusLine().getStatusCode();
if(code == 200){
InputStream is  =ressponse.getEntity().getContent();
byte[] result = StreamTool.getBytes(is);
return new String(result);
}
else{
throw new IllegalStateException("服务器状态异常");
}
}

public static String sendDataByHttpClientPost(String path , String name,String password) throws Exception{

//1. 获取到一个浏览器的实例
HttpClient client = new DefaultHttpClient();
//2. 准备要请求的 数据类型
HttpPost httppost = new HttpPost(path);
// 键值对
List< NameValuePair> parameters = new ArrayList();

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

UrlEncodedFormEntity entity = new UrlEncodedFormEntity(parameters, "utf-8");

//3.设置post请求的数据实体
httppost.setEntity(entity);

//4. 发送数据给服务器
HttpResponse  ressponse = client.execute(httppost);
int code = ressponse.getStatusLine().getStatusCode();
if(code == 200){
InputStream is  =ressponse.getEntity().getContent();
byte[] result = StreamTool.getBytes(is);
return new String(result);
}
else{
throw new IllegalStateException("服务器状态异常");
}
}

/**
* 提交数据给服务器 带一个文件
* @param path
* @param name
* @param password
* @param filepath 文件在手机上的路径
*
* @return
* @throws Exception
*/
public  static String sendDataByHttpClientPost(String path , String name,String password ,String filepath) throws Exception{
// 实例化上传数据的 数组  part []
Part[] parts = {new StringPart("name", name),
new StringPart("password", password),
new FilePart("file", new File(filepath))};

PostMethod filePost = new PostMethod(path);

filePost.setRequestEntity(new MultipartRequestEntity(parts, filePost.getParams()));
org.apache.commons.httpclient.HttpClient client = new org.apache.commons.httpclient.HttpClient();
client.getHttpConnectionManager().getParams()
.setConnectionTimeout(5000);
int status = client.executeMethod(filePost);
if(status==200){

System.out.println( filePost.getResponseCharSet());
String result = new String(filePost.getResponseBodyAsString());
String ha = new String ( result.getBytes("ISO-8859-1"),"UTF-8");
System.out.println(ha);

System.out.println("--"+result);
return result;
}
else{
throw new IllegalStateException("服务器状态异常");
}
}
}

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: