**
获取网络请求
**public class MainActivity extends Activity {
private Button query;
private EditText input;
private TextView info;
private final int UPDATE_UI = 1;
@SuppressLint("HandlerLeak")
private Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_UI :
info.setText(msg.obj.toString());
break;
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
query = findViewById(R.id.query);
input = findViewById(R.id.input);
info = findViewById(R.id.info);
query.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new Thread(
new Runnable() {
@Override
public void run() {
Log.i("TEST",Thread.currentThread().getName());
try {
queryPhonNumInfo(input.getText().toString());
} catch (IOException e) {
e.printStackTrace();
}
}
}
).start();
/*new Thread(){
@Override public void run() {
super.run();
}
}.start();*/
}
});
}
private String baseUrlStr = "https://tcc.taobao.com/cc/json/mobile_tel_segment.htm?tel=";
private void queryPhonNumInfo(String phonNum) throws IOException {
//获取信息
try {
//1 定义 URL 地址
URL url = new URL(baseUrlStr + phonNum);
//http https ftp
//ctrl + h 查看类的继承结构
//URLConnection
//ctrl + q 查看方法信息
//2 打开连接
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
//3 设置:请求方法;超时
//请求 方法 GET POST
urlConnection.setRequestMethod("GET");
//超时设置
//读取超时
urlConnection.setReadTimeout(5000);
//连接超时
urlConnection.setConnectTimeout(5000);
//4 连接并获取状态码
int responseCode = urlConnection.getResponseCode();
if (responseCode == 200) {
//5 读取字节流转换成字符串结果
String result = stream2String(urlConnection.getInputStream());
//操作ui 子线程不要操作ui
Message message = mHandler.obtainMessage(UPDATE_UI, result);
//Message msg = new Message();
mHandler.sendMessage(message);
//info.setText(result);
} else {
Message message = mHandler.obtainMessage(UPDATE_UI, "error:" + responseCode);
//info.setText("error: " + responseCode);
mHandler.sendMessage(message);
}
}catch (MalformedURLException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
}
//将字节流转换成字符
private String stream2String(InputStream is) throws IOException {
/*InputStream is;
InputStreamReader isr;
BufferedReader br;
OutputStream os;
OutputStreamWriter osw;
BufferedWriter bw;*/
InputStreamReader isr = new InputStreamReader(is, "gbk");
BufferedReader br = new BufferedReader(isr);
StringBuilder stringBuilder = new StringBuilder();
for (String tmp = br.readLine(); tmp != null; tmp = br.readLine()){
stringBuilder.append(tmp);
}
return stringBuilder.toString();
}
//网络操作需要申请权限
//主线程不能做网络 及 耗时 操作
//子线程中不能更新ui
//Handler 线程间通信
}
本文介绍了一个在Android应用中发起网络请求并安全更新UI的方法。通过使用子线程进行网络请求,避免了在主线程中执行耗时操作,同时利用Handler机制在主线程中更新UI,确保了应用的响应性和稳定性。

被折叠的 条评论
为什么被折叠?



