http通信用到两种接口。第二种比第一种封装得更加好,两种都行。
和socket不同的是,http只能请求相应,也就是一定要客户端找一下服务器,服务器回一下。而且服务器不管每次找他的是谁,要什么给什么就是了。
1. HttpURLConnection接口
三步走:
第一步:因为必须找一下服务器,服务器才回自己一下,所以先腾个地方给服务器发请求。
暂时还不懂线程那里是怎么回事,暂时就还是用onClick就发一个请求来。
第二步:解决URL
URL url = new URL(new String("http://......"));
HttpURLConnection urlConn = (HttpURLConnection)url.openConnection();
设置一些属性(可选)
urlConn.setDoOutput(true);
urlConn.setDoInput(true);
//设置请求方式为POST
urlConn.setRequestMethod("POST"); //如果是post的话就加这一句
//POST请求不能使用缓存
urlConn.setUseCaches(false);
//关闭连接
urlConn.disConnection();
如果是post的话要加这些东西
urlConnect.setConnectTimeout(3000); // 设置连接超时时间
urlConnect.setDoOutput(true); //post请求必须设置允许输出
urlConnect.setUseCaches(false); //post请求不能使用缓存
urlConnect.setRequestMethod("POST"); //设置post方式请求
urlConnect.setInstanceFollowRedirects(true);
urlConnect.setRequestProperty("Content-Type","application/x-www-form-urlencode");// 配置请求Content-Type
urlConnect.connect(); // 开始连接
//下面是送参数过去,因为是post所以不能在URL里写参数
DataOutputStream dos = new DataOutputStream(urlConnect.getOutputStream()); // 发送请求参数
dos.write(postData);
dos.flush();
dos.close();
第四步:这次步数比较多,再多来一步
接受传回来的数据
if ((x = urlConnect.getResponseCode()) == 200) { //请求成功
final byte[] data = readInputStream(urlConnect.getInputStream());
txtV_rslt.setText(new String(data, "UTF-8"));
txtV_rslt.post(new Runnable() {
@Override
public void run() {
try {
txtV_rslt.setText(new String(data, "UTF-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}});
}
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("error", e.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("error", e.toString());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
Log.i("error", e.toString());
}
其中
public byte[] readInputStream(InputStream inStream) throws Exception{
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int len = 0;
while( (len = inStream.read(buffer)) !=-1 ){
outStream.write(buffer, 0, len);
}
byte[] data = outStream.toByteArray();//转化为二进制数据
outStream.close();
inStream.close();
return data;
}
2. HttpClient接口
还没看。