Handler
AsyncTask
HTTPURLConnection使用
- get方式使用
private void initData() {
new Thread(() -> {
try {
//创建远程url连接对象
URL url = new URL(smartUrl);
//通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//获取结果码
int responseCode = con.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
//通过连接对象获取一个输入流,向远程读取
InputStream inputStream = con.getInputStream();
//封装输入流is,并指定字符集
InputStreamReader ist = new InputStreamReader(inputStream);
char[] chars = new char[1024];
int len = 0;
StringBuffer sb = new StringBuffer();
while ((len = ist.read(chars)) != -1) {
sb.append(chars, 0, len);
}
String json = sb.toString();
Message message = Message.obtain();
message.what = 1;
message.obj = json;
handler.sendMessage(message);
}
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
Handler handler = new Handler() {
@Override
public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 1:
String json = (String) msg.obj;
SmartBean smartBean = new Gson().fromJson(json, SmartBean.class);
List<SmartBean.ResultsBean> results = smartBean.getResults();
ArrayList<SmartBean.ResultsBean> list = new ArrayList<>();
list.addAll(results);
SmartAdapter adapter = new SmartAdapter(MainActivity.this, list);
lv_smart.setAdapter(adapter);
break;
}
}
};
- post方式使用
private void login() {
new Thread(() -> {
try {
//登录url
String loginUrl = "https://www.wanandroid.com/user/login";
// 创建远程url连接对象
URL url = new URL(loginUrl);
//通过远程url对象打开一个连接,强制转换为HttpUrlConnection类型
HttpURLConnection con = (HttpURLConnection) url.openConnection();
//设置连接方式:POST
con.setRequestMethod("POST");
//设置超时
con.setConnectTimeout(10000);
con.setReadTimeout(10000);
//设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
//setDoOutput默认值为:false,当向远程服务器传送数据/写数据时,需要设置为true
con.setDoOutput(true);
//setDoInput默认值为:true,当前向远程服务读取数据时,设置为true,该参数可有可无
con.setDoInput(true);
//设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//通过连接对象获取一个输出流
OutputStream os = con.getOutputStream();
//通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
String param = "username=anfly&password=123456";
os.write(param.getBytes());
//获取结果码
int responseCode = con.getResponseCode();
if (responseCode == 200) {
//通过连接对象获取一个输入流,向远程读取
InputStream is = con.getInputStream();
//封装输入流is,并指定字符集
InputStreamReader isr = new InputStreamReader(is);
char[] chars = new char[1024];
StringBuffer sb = new StringBuffer();
int len = 0;
while ((len = isr.read(chars)) != -1) {
sb.append(chars, 0, len);
}
//sb转为string
String json = sb.toString();
Log.e("TAG", "json=" + json);
//关流
is.close();
isr.close();
}
//关流
os.close();
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
网友评论