布局
<Button
android:id="@+id/send_request"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="发送请求"
/>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/reponse_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</ScrollView>
其中ScrollView用来显示网站服务器返回回来的数据
代码逻辑
解释都在注释里面了
package com.example.network;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button send_request;
private TextView reponse_text;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
send_request=findViewById(R.id.send_request);
reponse_text=findViewById(R.id.reponse_text);
send_request.setOnClickListener(this::onClick);
}
@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.send_request:
setSendrequestwithHttpURL();
break;
}
}
private void setSendrequestwithHttpURL(){
//开启线程来发起网洛
new Thread(new Runnable() {
@Override
public void run() {
HttpURLConnection connection=null;
//BufferedReader的标准写法
/* import java.io.* ;
public class BufferedReaderDemo01{
public static void main(String args[]){
BufferedReader buf = null ; // 声明对象
buf = new BufferedReader(new InputStreamReader(System.in)) ; // 将字节流变为字符流
String str = null ; // 接收输入内容
System.out.print("请输入内容:") ;
try{
str = buf.readLine() ; // 读取一行数据
}catch(IOException e){
e.printStackTrace() ; // 输出信息
}
System.out.println("输入的内容为:" + str) ;
}
};*/
BufferedReader reader=null;
try {
//设置url对象并传入目标网络地址
URL url=new URL("http://www.baidu.com");
connection=(HttpURLConnection) url.openConnection();
//设置http请求所使用的方法,get表示获取数据,post表示提交数据
connection.setRequestMethod("GET");
//设置链接超时和读取超时的毫秒数
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
//InputStream可以获取服务器返回的输入流
InputStream inputStream=connection.getInputStream();
//从获取到的输入流进行读取
reader=new BufferedReader(new InputStreamReader(inputStream));
/* StringBuilder,它是一个可变对象,可以预分配缓冲区,这样,往StringBuilder中新增字符时,不会创建新的临时对象:*/
StringBuilder response=new StringBuilder();
String line;
while ((line=reader.readLine())!=null){
response.append(line);
}
Showresponse(response.toString());
}catch (Exception e){
e.printStackTrace();
}
/* 因为不管是否发生异常 finally 都会执行,因此我们可以在 finally 代码块中执行关闭连接、关闭文件和释放线程的的操作。*/
finally {
if (reader!=null){
try {
reader.close();
}catch (Exception e){
e.printStackTrace();
}
}
//关掉http链接
if (connection!=null){
connection.disconnect();
}
}
}
}).start();
}
private void Showresponse(String response){
//安卓是不允许在子线程中更改UI的,所以要使用runOnUiThread(new Runnable()
runOnUiThread(new Runnable() {
@Override
public void run() {
reponse_text.setText(response);
}
});
}
}
最后记得申请网络权限