天天看点

android开发多线程编程,Android多线程编程

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 results = smartBean.getResults();

ArrayList 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();

}