发送http请求是比较好耗时的操作,所以要把他们放在线程里面(我是这么理解的)
现在android版本越来越高,都在用HttpURLConnection这种方式发送链接(舍弃了原来的HtypClient)
发送请求大致分为如下几步
1.创建一个连接
URL url = new URL("http://192.168.0.105/login/login");
在这里要注意添加上http,否则可能会报不知协议的错误。
2.创建HttpURLConnection 实例
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
3.选择提交的方式(这边我用post)
connection.setRequestMethod("POST");
4.设置超时时间
//连接超时
connection.setConnectTimeout(8000);
//读取超时
connection.setReadTimeout(8000);
5.发送是用的输入输出流
//连接打开输出流
OutputStream os = connection.getOutputStream();
//String str="str=123";
//jsons数据拼接
JSONObject json = new JSONObject();
json.put("userPhone", phone);
json.put("password", password);
Log.i("json", json.toString());
//把数据改为中文编码(接收时 接受dataStr)
String dataEncrypt = "dataStr=" + URLEncoder.encode(json.toString(), "UTF-8");
//数据写入输出流(发送)
os.write(dataEncrypt.getBytes());
6.Http 在请求之后会有返回的状态码
200-服务器成功的返回网页。404-请求的网页存在。503-服务不可用。
if (connection.getResponseCode() == 200) {
//接收服务器输入流信息
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//拿到信息
String result = br.readLine();
Log.i("返回数据:", result);
}
这样就拿到了返回的数据之后记得关闭创建的连接
is.close();
os.close();
connection.disconnect();
总得代码
new Thread(new Runnable() {
@Override
public void run() {
BufferedReader reader = null;
try {
//new一个访问的url
URL url = new URL("http://192.168.0.105/login/login");
//创建HttpURLConnection 实例
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
//提交数据的方式
connection.setRequestMethod("POST");
connection.setDoOutput(true);
//设置超时时间
connection.setConnectTimeout(8000);//连接超时
//读取超时
connection.setReadTimeout(8000);
//连接打开输出流
OutputStream os = connection.getOutputStream();
Log.i("userPhone", phone);
Log.i("psaaword", password);
//String str="str=123";
//jsons数据拼接
JSONObject json = new JSONObject();
json.put("userPhone", phone);
json.put("password", password);
Log.i("json", json.toString());
//把数据改为中文编码(接收时 接受dataStr)
String dataEncrypt = "dataStr=" + URLEncoder.encode(json.toString(), "UTF-8");
//数据写入输出流(发送)
os.write(dataEncrypt.getBytes());
if (connection.getResponseCode() == 200) {
//接收服务器输入流信息
InputStream is = connection.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(is));
//拿到信息
String result = br.readLine();
Log.i("返回数据:", result);
is.close();
os.close();
connection.disconnect();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();