手机开发中常常需要用到网络连接发送数据,像web一样,手机中的请求也有GET请求和POST请求之分。
以下是一个HttpProcess类,它提供了POST和GET请求的方式。
package com.thinkrace.UCHome.network;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import javax.microedition.io.Connector;
import javax.microedition.io.HttpConnection;
/**
*
* @author Administrator
*/
public class HttpProcess {
/**
* HTTP GET请求方式
* 此方法读取返回的xml时是一个字符一个字符读取的。
* @param url
* @return
*/
public static String HttpGET(String url) {
String content = null;
try {
//打开网络连接
HttpConnection hc = (HttpConnection) Connector.open(url);
hc.setRequestMethod(HttpConnection.GET);
InputStreamReader isr = new InputStreamReader(hc.openInputStream(), "UTF-8");
int ch = 0;
StringBuffer buf = new StringBuffer();
while ((ch = isr.read()) != -1) {
buf.append((char) ch);
}
//关闭流
isr.close();
hc.close();
} catch (IOException ex) {
System.out.println("HttpGET方法出现异常");
ex.printStackTrace();
}
return content;
}
/**
* 分配固定内存的GET请求,无论返回的xml有多大,总是只显示5k
* 超出的部分会被截断,剩余的将会用空白补齐
* @param url
* @return
*/
public static String HttpGETByAssignMemory(String url) {
String content = null;
try {
HttpConnection hc = (HttpConnection) Connector.open(url);
hc.setRequestMethod(HttpConnection.GET);
DataInputStream dis = new DataInputStream(hc.openDataInputStream());
//分配5K的内存
byte[] data = new byte[1024 * 5];
dis.read(data);
content = new String(data, "UTF-8");
} catch (IOException ex) {
System.out.println("HttpGETByAllocateMemory方法出现异常");
ex.printStackTrace();
}
return content;
}
public static String HttpPOST(String url, String argument) {
String xml = null;
try {
HttpConnection hc = (HttpConnection) Connector.open(url, Connector.READ_WRITE);
hc.setRequestMethod(HttpConnection.POST);
//设置POST的头信息,UserAgent(设置代理),Content-Language(语言),Content-Type(类型),Content-Length(POST的长度)
hc.setRequestProperty("User-Agent", "Profile/MIDP-2.0 Configuration/CLDC-1.1");
hc.setRequestProperty("Content-Language", "en-US");
hc.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
byte[] postData = argument.getBytes("UTF-8");
hc.setRequestProperty("Content-Length",
Integer.toString(postData != null ? postData.length : 0));
OutputStream out = hc.openOutputStream();
out.write(postData);
InputStream in = hc.openInputStream();
DataInputStream dis = new DataInputStream(in);
int ch = 0;
StringBuffer buf = new StringBuffer();
while((ch = dis.read()) != -1){
buf.append((char)ch);
}
xml = buf.toString();
} catch (IOException ex) {
System.out.println("HttpPOST方法出现异常");
ex.printStackTrace();
}
return xml;
}
/**
* String转换成byte数组
* @param str
* @return
*/
public static byte[] StringtoBytes(String str) {
byte[] data = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeUTF(str);
data = baos.toByteArray();
baos.close();
dos.close();
} catch (Exception ex) {
System.out.println("StringtoBytes方法出现异常");
ex.printStackTrace();
}
return data;
}
/**
* byte[]数组转换成String
* @param data
* @return
*/
public static String BytesToString(byte[] data) {
ByteArrayInputStream bais = new ByteArrayInputStream(data);
DataInputStream dis = new DataInputStream(bais);
String str = null;
try {
str = dis.readUTF();
bais.close();
dis.close();
} catch (Exception ex) {
System.out.println("BytesToString方法出现异常");
ex.printStackTrace();
}
return str;
}
}