公司网站搭建费用,青岛手机建站哪家好,小程序开发平台找哪家好,桥东网站建设文章目录 webView使用步骤示例 HttpURLConnection使用步骤示例GET请求POST请求 okHttp使用步骤1. 添加依赖2. 创建OkHttpClient实例3. 创建Request对象构建请求4. 发送请求5. 获取响应 Pull解析方式1. 准备XML数据2. 创建数据类3. 使用Pull解析器解析XML webView WebView 是 An… 文章目录 webView使用步骤示例 HttpURLConnection使用步骤示例GET请求POST请求 okHttp使用步骤1. 添加依赖2. 创建OkHttpClient实例3. 创建Request对象构建请求4. 发送请求5. 获取响应 Pull解析方式1. 准备XML数据2. 创建数据类3. 使用Pull解析器解析XML webView WebView 是 Android 中用于显示网页内容的组件。它允许你在应用内嵌入一个浏览器加载并显示 HTML、JavaScript、CSS 等网页内容。以下是使用 WebView 的步骤和一些示例代码。 使用步骤 在布局文件中添加 WebView 在 XML 布局文件中定义一个 WebView 控件。 在 Activity 或 Fragment 中初始化 WebView 获取布局中的 WebView 实例并配置其设置。 加载网页内容 使用 loadUrl() 方法加载网页 URL或使用 loadData() 方法加载 HTML 字符串。 配置设置可选 配置 JavaScript 支持、缓存设置等。 处理 WebView 的事件可选 设置 WebViewClient 和 WebChromeClient 来处理网页加载过程中的事件和 JavaScript 对话框。 权限 在 AndroidManifest.xml 中添加互联网权限
uses-permission android:nameandroid.permission.INTERNET/示例
布局文件
?xml version1.0 encodingutf-8?
RelativeLayout xmlns:androidhttp://schemas.android.com/apk/res/androidandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentWebViewandroid:idid/webviewandroid:layout_widthmatch_parentandroid:layout_heightmatch_parent /
/RelativeLayout在 Activity 中使用 WebView
在 MainActivity.java 中初始化并使用 WebView
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebView;
import android.webkit.WebViewClient;import androidx.appcompat.app.AppCompatActivity;public class MainActivity extends AppCompatActivity {private WebView webView;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);webView findViewById(R.id.webview);// 启用 JavaScript 支持webView.getSettings().setJavaScriptEnabled(true);// 设置 WebViewClient 以处理网页加载事件webView.setWebViewClient(new WebViewClient());// 加载网页内容webView.loadUrl(https://www.baidu.com);}
}配置 WebView 设置 JavaScript 支持启用 JavaScript 支持以处理动态网页内容。 webView.getSettings().setJavaScriptEnabled(true);缓存设置可以设置缓存模式来优化加载速度。 webView.getSettings().setCacheMode(WebSettings.LOAD_DEFAULT);自定义用户代理可以设置用户代理字符串。 webView.getSettings().setUserAgentString(Custom User Agent);处理 WebView 事件
WebViewClient用于处理网页加载过程中的事件。 onPageStarted(WebView view, String url, Bitmap favicon)当页面开始加载时调用。onPageFinished(WebView view, String url)当页面加载完成时调用。shouldOverrideUrlLoading(WebView view, WebResourceRequest request)处理 URL 跳转请求。
权限
在 AndroidManifest.xml 中添加互联网权限
uses-permission android:nameandroid.permission.INTERNET/HttpURLConnection HttpURLConnection 是 Android 中用于处理 HTTP 请求的类。它提供了一种在应用中发送和接收 HTTP 请求和响应的方法。 使用步骤
1. 创建 URL 对象
使用指定的 URL 创建 URL 对象。
2. 打开连接
使用 URL.openConnection() 打开连接并将其转换为 HttpURLConnection。
3. 配置连接参数
设置请求方法如 GET 或 POST。配置连接和读取超时时间等参数。
4. 发送请求
获取输入流并读取服务器响应。
5. 处理响应
读取输入流中的数据并进行处理。
6. 关闭连接
关闭输入流和断开连接。
// 创建一个URL对象指定请求的URL地址
URL url new URL(http://www.baidu.com);
// 打开一个到该URL的HTTP连接并将其转换为HttpURLConnection
HttpURLConnection connection (HttpURLConnection) url.openConnection();// 设置请求方法为GET
connection.setRequestMethod(GET);
// 设置连接超时时间为8秒
connection.setConnectTimeout(8000);
// 设置读取超时时间为8秒
connection.setReadTimeout(8000);// 获取服务器响应的输入流
InputStream inputStream connection.getInputStream();
// 字节流-字符流-字符缓冲流
BufferedReader reader new BufferedReader(new InputStreamReader(inputStream));
StringBuilder sb new StringBuilder();
String line;
while ((line reader.readLine()) ! null) {sb.append(line);
}
return sb.toString();
// 断开与服务器的连接
connection.disconnect();示例
获取百度网页源码 Android 9.0API level 28及更高版本中对所有的网络请求必须使用HTTPS public class MainActivity extends AppCompatActivity implements View.OnClickListener {// 显示服务器响应的文本视图private TextView tv;// 发送请求的按钮private Button button;Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);button findViewById(R.id.btn_send);tv findViewById(R.id.tv_response);button.setOnClickListener(this);}Overridepublic void onClick(View v) {// 在新线程中执行网络请求new Thread(new Runnable() {Overridepublic void run() {// 初始化HTTP连接和读取器HttpURLConnection connection null;BufferedReader reader null;try {// 创建URL对象指定请求的URLURL url new URL(https://www.baidu.com);// 打开连接connection (HttpURLConnection) url.openConnection();// 设置请求方法为GETconnection.setRequestMethod(GET);// 设置连接超时和读取超时时间connection.setConnectTimeout(8000);connection.setReadTimeout(8000);// 获取输入流用于读取服务器响应InputStream inputStream connection.getInputStream();// 将输入流包装为缓冲读取器reader new BufferedReader(new InputStreamReader(inputStream));StringBuilder sb new StringBuilder();String line;while ((line reader.readLine()) ! null) {sb.append(line);}// 在UI线程中更新界面showResponse(sb.toString());} catch (IOException e) {throw new RuntimeException(e);} finally {if (reader ! null) {try {reader.close();} catch (IOException e) {throw new RuntimeException(e);}}if (connection ! null)connection.disconnect();}}}).start();}// 在UI线程中更新响应文本private void showResponse(final String string) {runOnUiThread(new Runnable() {Overridepublic void run() {tv.setText(string);}});}
}申请权限
uses-permission android:nameandroid.permission.INTERNET/GET请求
主要目的:从服务端获取符合条件的数据。 POST请求
主要目的:向服务端提交数据。
场景举例:用户注册的时候填写表格里一堆的信息(姓名、性别、年龄、电话…),这些都是要提交给服务端的数据
表单 okHttp
使用步骤
1. 添加依赖
implementation com.squareup.okhttp3:okhttp:4.10.02. 创建OkHttpClient实例
OkHttpClient client new OkHttpClient();这是进行网络请求的客户端配置了连接池、超时设置等参数。
3. 创建Request对象构建请求
Request request new Request.Builder().url(https://www.baidu.com).build();使用 Request.Builder 来构建 HTTP 请求包括设置 URL 和请求方法GET、POST 等。
4. 发送请求
调用execute方法发送请求并获取服务器返回数据
Response response client.newCall(request).execute();newCall(request).execute() 会同步地执行请求并返回一个 Response 对象。异步执行可以使用 enqueue 方法。
5. 获取响应
final String responseData response.body().string();从 Response 对象中获取响应体并将其转为字符串。响应体只能读取一次所以多次使用它可能需要将其保存到其他地方。
更新 UI
runOnUiThread(new Runnable() {Overridepublic void run() {tv.setText(responseData);}
});由于网络请求是在子线程中执行的任何更新 UI 的操作都必须在主线程中进行。使用 runOnUiThread 来确保 UI 更新在主线程中执行。
示例
public class MainActivity extends AppCompatActivity implements View.OnClickListener {private TextView tv; private Button button; Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main); button findViewById(R.id.btn_send);tv findViewById(R.id.tv_response);button.setOnClickListener(this);}Overridepublic void onClick(View v) {// 在子线程中进行网络请求new Thread(new Runnable() {Overridepublic void run() {// 创建 OkHttpClient 实例OkHttpClient client new OkHttpClient();// 构建一个 GET 请求指定请求的 URLRequest request new Request.Builder().url(https://www.baidu.com).build();try {// 执行网络请求并获取响应Response response client.newCall(request).execute();// 获取响应体的字符串形式final String responseData response.body().string();// 使用 runOnUiThread() 确保 UI 更新在主线程中进行runOnUiThread(new Runnable() {Overridepublic void run() {// 更新 TextView 的内容为网络请求的响应数据tv.setText(responseData);}});} catch (IOException e) {// 捕获并打印可能发生的 IOExceptione.printStackTrace();}}}).start(); // 启动子线程进行网络请求}
}Pull解析方式 Pull解析器是一种基于事件的解析方式当解析器读取到XML文档中的开始标签、结束标签或文本内容时会触发相应的事件。它是Android中处理XML的推荐方法之一因其速度快且内存占用低。 1. 准备XML数据
假设我们有如下的XML数据
usersusernameJohn Doe/nameage30/agemarriedtrue/married/userusernameJane Doe/nameage25/agemarriedfalse/married/user
/users2. 创建数据类
我们需要创建一个数据类来表示解析后的数据
public class User {private String name;private int age;private boolean married;// ...
}3. 使用Pull解析器解析XML
在Activity或Fragment中使用Pull解析器解析XML数据
public class MainActivity extends AppCompatActivity {Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// XML字符串String xmlData usersusernameJohn Doe/nameage30/agemarriedtrue/married/userusernameJane Doe/nameage25/agemarriedfalse/married/user/users;try {// 解析XMLListUser users parseXML(xmlData);// 遍历解析得到的用户列表并打印日志for (User user : users) {Log.d(MainActivity, User Name: user.getName());Log.d(MainActivity, User Age: user.getAge());Log.d(MainActivity, User Married: user.isMarried());}} catch (XmlPullParserException | IOException e) {e.printStackTrace();}}// 解析XML数据private ListUser parseXML(String xmlData) throws XmlPullParserException, IOException {ListUser users null; // 用于存储用户对象的列表User currentUser null; // 当前正在解析的用户对象boolean insideUser false; // 标记当前是否在user标签内// 创建XmlPullParserFactory和XmlPullParser实例XmlPullParserFactory factory XmlPullParserFactory.newInstance();XmlPullParser parser factory.newPullParser();parser.setInput(new StringReader(xmlData)); // 设置解析器的输入为XML字符串int eventType parser.getEventType(); // 获取事件类型while (eventType ! XmlPullParser.END_DOCUMENT) { // 遍历整个文档String tagName;switch (eventType) {case XmlPullParser.START_DOCUMENT:users new ArrayList(); // 初始化用户列表break;case XmlPullParser.START_TAG:tagName parser.getName(); // 获取标签名if (tagName.equals(user)) { // 如果是user标签insideUser true; // 标记进入user标签currentUser new User(); // 创建一个新的User对象} else if (currentUser ! null) {// 仅当在user标签内部时才解析这些标签if (tagName.equals(name) insideUser) {currentUser.setName(parser.nextText());} else if (tagName.equals(age) insideUser) {currentUser.setAge(Integer.parseInt(parser.nextText()));} else if (tagName.equals(married) insideUser) {currentUser.setMarried(Boolean.parseBoolean(parser.nextText()));}}break;case XmlPullParser.END_TAG:tagName parser.getName(); // 获取结束标签的名称if (tagName.equals(user) currentUser ! null) {users.add(currentUser); // 将解析完毕的用户对象添加到列表中insideUser false; // 标记离开user标签}break;}eventType parser.next(); // 获取下一个事件}return users; // 返回解析得到的用户列表}
}创建XmlPullParserFactory和XmlPullParser实例。设置解析器的输入为XML字符串。使用while循环遍历整个XML文档根据事件类型开始标签、结束标签、文本等进行相应处理。在遇到user标签时创建新的User对象并开始填充数据。在遇到/user标签时将填充完毕的User对象添加到ListUser中。解析完成后返回包含所有用户信息的列表。 感谢您的阅读 如有错误烦请指正 参考 31.2-Android网络请求的Get与Post方法(1)_哔哩哔哩_bilibili