1、访问网络的工作不能在主线程(UI)中进行,如果耗时过程则会导致程序出错 ------(子线程中进行)
2、子线程不能更新UI -------(主线程中进行) 即:不能改变界面的显示,比如改变显示的文字,必须转到主线程中set
new Thread(new Runnable() {
public void run() {
HttpLogin http=new HttpLogin();
String str=http.LoginByPost("1", "1");//这是连接的方法
word = str;
}
}).start();
public String LoginByPost(String username,String passwd){
System.out.println("开始线程:");
String msg = "";
try {
//初始化URL
URL url = new URL(LOGIN_URL);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
//设置请求方式
conn.setRequestMethod("POST");
//设置超时信息
conn.setReadTimeout(5000);
conn.setConnectTimeout(5000);
//设置允许输入
conn.setDoInput(true);
//设置允许输出
conn.setDoOutput(true);
//post方式不能设置缓存,需手动设置为false
conn.setUseCaches(false);
//我们请求的数据
String data = "password="+ URLEncoder.encode(passwd,"UTF-8")+
"&username="+URLEncoder.encode(username,"UTF-8");
//獲取輸出流
OutputStream out = conn.getOutputStream();
out.write(data.getBytes());
out.flush();
out.close();
conn.connect();
if (conn.getResponseCode() == 200) {
// 获取响应的输入流对象
InputStream in = conn.getInputStream();
// 创建字节输出流对象
ByteArrayOutputStream outMessage = new ByteArrayOutputStream();
// 定义读取的长度
int len = 0;
// 定义缓冲区
byte buffer[] = new byte[1024];
// 按照缓冲区的大小,循环读取
while ((len = in.read(buffer)) != -1) {
// 根据读取的长度写入到os对象中
outMessage.write(buffer, 0, len);
}
// 释放资源
in.close();
outMessage.close();
// 返回字符串
msg = new String(outMessage.toByteArray());
return msg;
}
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return msg;
}