在进行Android开发时,涉及到的网络请求往往不应在主线程中处理,为了提升用户体验,可以将网络请求放在子线程中执行。
以下是一个简单的Android网络请求子线程示例:
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection = null;
BufferedReader reader = null;
try {
URL url = new URL("https://www.aliyun.com");//这里写你要请求的API
connection = (HttpURLConnection) url.openConnection();
// 设置请求方法,默认是GET
connection.setRequestMethod("GET");
// 设置字符集
connection.setRequestProperty("Charset", "UTF-8");
// 设置请求参数,即header字段,必须在getInputStream之前设置,不然会报错
connection.setRequestProperty("key", "value");
// 打开到此 URL 引用的资源的通信链接(如果尚未建立这样的连接)。
connection.connect();
//得到输入流
InputStream is = connection.getInputStream();
reader = new BufferedReader(new InputStreamReader(is));
StringBuilder result = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
result.append(line);
}
//在这里运行UI操作,因为是在子线程中,需要使用runOnUiThread方法
runOnUiThread(new Runnable() {
@Override
public void run() {
//处理UI
}
});
} catch (Exception e) {
e.printStackTrace();
} finally {
if (reader != null) {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
// 断开连接
connection.disconnect();
}
}
}
}).start();
注意:由于Android 4.0之后版本不再允许在主线程中进行耗时操作,所以务必在子线程中使用以上代码。此外,不要忘记在AndroidManifest.xml文件中添加网络权限。
发布者:luotuoemo,转转请注明出处:https://www.jintuiyun.com/172168.html