Android-HttpRequest

POST

据度娘解释,以前的安卓应用发出 http 请求后,如果请求时间过长,就会产生应用无响应的状态。所以改成了现在这种,直接发出 http 请求就会抛出错误。想要正确地发出http请求,就需要开一个子线程来进行这些操作。

下方的代码采用的是,直接通过 Thread 类创建子线程,需要传递的参数是一个实现了 Runnable 接口的类的实例对象。这里的对象通过匿名类生成。线程和匿名类的知识,可以在《Java2 实用教程》(俗称 课本)中找到。

线程的启动使用 start()方法。启动后,就进入等待cpu使用权的队列。得到使用权就开始运行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
public class HttpUtil {
public static String requestPost() throws IOException, JSONException {
new Thread(new Runnable() {
@Override
public void run() {
try {
//创建URL对象
URL url=new URL("http://www.xxx.com/user/check");
//获取连接
HttpURLConnection connection= (HttpURLConnection) url.openConnection();
//设定请求方式
connection.setRequestMethod("POST");
//设置内容类型,这里是json数据
connection.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
//期望接收到的请求返回值
connection.setRequestProperty("Accept","application/json");
//允许通过连接向外输出,即发送数据到服务器
connection.setDoOutput(true);
//允许通过连接向内输出,即安卓应用收到数据
connection.setDoInput(true);

//创建实体对象
User user=new User("914302063","123456");
//转换为JSONObject对象。user.toString()的toString方法是额外实现的。
JSONObject jsonObject=new JSONObject(user.toString());
//转字符串,也就是这个字符串就是俗称的json字符串,是目标数据。
String json=jsonObject.toString();
Log.i("JsonData",json);

//通过连接获取输出流
OutputStream outputStream=connection.getOutputStream();
//把json字符串转换成字符数组,通过输出流输出
outputStream.write(json.getBytes());
//outputStream输出流缓存区满了会自动调用flush(),输出流关闭前也会调用。所以这里写不写flush都可。
outputStream.flush();
outputStream.close();
Log.i("responseCode", String.valueOf(connection.getResponseCode()));

//通过连接获得输入流
InputStream inputStream=connection.getInputStream();
String result="";
StringBuilder stringBuilder=new StringBuilder();
InputStreamReader inputStreamReader=new InputStreamReader(inputStream);
BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
while((result=bufferedReader.readLine())!=null){
stringBuilder.append(result);
}
Log.i("resultData", String.valueOf(stringBuilder));
}catch (Exception e){
System.out.println(e);
}
}
}).start();

return null;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class User {
String username;
String password;

public User(){}
public User(String username, String password) {
this.username = username;
this.password = password;
}

public String getUsername() {
return username;
}

public void setUsername(String username) {
this.username = username;
}

public String getPassword() {
return password;
}

public void setPassword(String password) {
this.password = password;
}

@Override
public String toString() {//这个方法在转换对象为JSONObject的时候会用到
return "{" +
"username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}

效果图