WebView

可以利用其嵌入一个浏览器

1.在布局文件中引入WebView控件

2.获取该控件实例并设置浏览器属性

3.用setWebViewClient使目标网页在WebView显示

4.调用loadUrl方法传入网址并获取权限

1
2
3
4
5
6
7
8
9
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<WebView
android:id="@+id/web_view"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</LinearLayout>
1
2
3
4
5
6
7
8
9
10
11
12
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView=(WebView) findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("https://www.baidu.com");
}
}
1
<uses-permission android:name="android.permission.INTERNET"/>

使用HTTP协议访问网络

使用HttpURLConnection

GET

1.调用sendRequestWithHttpURLConnection()方法开启子线程,并使用HttpURLConnection发出HTTP请求

2.利用BufferedReader对服务器返回的流进行读取,并将结果传入到showResponse()中

3.在showResponse里通过runOnUiThread将线程切换到主线程,然后更新UI元素(安卓不允许在子线程进行UI操作)

4.获取权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//定义TextView
TextView responseText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取按钮实例
Button sendRequest=(Button) findViewById(R.id.send_request);
//获取TextView实例
responseText=(TextView) findViewById(R.id.response_text);
//设置按钮点击事件
sendRequest.setOnClickListener(this);
}
//按钮点击事件
@Override
public void onClick(View view) {
if(view.getId()==R.id.send_request){
//发送网络请求
sendRequestWithHttpURLConnection();
}
}
private void sendRequestWithHttpURLConnection() {
//开启线程来发起网络请求
new Thread(new Runnable() {
@Override
public void run() {
//获取HttpURLConnection和BufferedReader对象
HttpURLConnection connection=null;
BufferedReader reader=null;
try{
//获取URL对象,并传入目标网址
URL url=new URL("https://www.baidu.com");
//获取HttpURLConnection实例
connection=(HttpURLConnection) url.openConnection();
//设置HTTP请求使用的方法(方法主要有两个,一个是GET表示希望从服务器那里获取数据,POST表示希望提交数据给服务器)
connection.setRequestMethod("GET");
//自由定制一些设置如连接超时或读取超时的毫秒数
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
//获取到服务器返回的输入流
InputStream in=connection.getInputStream();
//下面对获取到的输入流进行读取
reader=new BufferedReader(new InputStreamReader(in));
StringBuilder response=new StringBuilder();
String line;
//readLine一行一行读取并将其返回成字符串
while((line= reader.readLine())!=null){
response.append(line);
}
//将返回的数据显示显示到界面上
showResponse(response.toString());
}catch (Exception e){
e.printStackTrace();
}finally {
if(reader!=null){
try{
//关掉BufferedReader对象
reader.close();
}catch (IOException e){
e.printStackTrace();
}
}
if(connection!=null){
//将HTTP连接关掉
connection.disconnect();
}
}
}
}).start();
}
//将返回的数据显示显示到界面上
private void showResponse(final String response){
runOnUiThread(new Runnable() {
@Override
public void run() {
//在这里进行UI操作,将结果显示到界面上
responseText.setText(response);
}
});
}
}
1
<uses-permission android:name="android.permission.INTERNET"/>
POST

将请求方法改为POST,并在获取输入流之前把要提交数据写出即可。注意每条数据都要以键值对形式存在,数据与数据间用“&”隔开

1
2
3
connection.setRequestMethod("POST");
DataOutputStream out=new DataOutputStream(connection.getOutputStream);
out.writeBytes("username=admin & password=123456")

使用OkHttp

GET

1.添加依赖库

2.获取OkHttpClient实例

3.创建Request对象,发起一条HTTP请求,可以在build之前连缀很多方法来丰富该对象

4.调用newCall()创建一个Call对象,并用execute方法发送请求并获取服务器返回的数据

5.获取返回数据具体内容

6.获取权限

1
implementation ("com.squareup.okhttp3:okhttp:4.12.0")
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
//定义TextView
TextView responseText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//获取按钮实例
Button sendRequest=(Button) findViewById(R.id.send_request);
//获取TextView实例
responseText=(TextView) findViewById(R.id.response_text);
//设置按钮点击事件
sendRequest.setOnClickListener(this);
}

@Override
public void onClick(View view) {
sendRequestWithOkHttp();
}

private void sendRequestWithOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
try {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url("https://www.baidu.com")
.build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
showResponse(responseData);
}catch (Exception e){
e.printStackTrace();
}
}
}).start();
}
//将返回的数据显示显示到界面上
private void showResponse(final String response){
runOnUiThread(new Runnable() {
@Override
public void run() {
//在这里进行UI操作,将结果显示到界面上
responseText.setText(response);
}
});
}
}
1
<uses-permission android:name="android.permission.INTERNET" />
POST

1.先构建一个RequestBody对象来存放待提交的参数

2.在Request.Builder()中调用post()方法将RequestBody对象传入

3.接下来操作和GET的一样

1
2
3
4
RequestBody requestBody=new FormBody.Builder()
.add("username","admin")
.add("password","123456")
.build();
1
2
3
4
Request request = new Request.Builder()
.url("https://www.baidu.com")
.post(requestBody)
.build();