WebView用法:在应用程序里镶嵌浏览器
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
WebView webView = findViewById(R.id.web_view);
webView.getSettings().setJavaScriptEnabled(true);
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://www.baidu.com");
}
使用HTTP协议访问网络
使用HttpURLConntection
URL:统一资源定位器(Uniform Resource Locators)
加入权限:
<uses-permission android:name="android.permission.INTERNET"/>
package com.example.networktest;
import androidx.appcompat.app.AppCompatActivity;
import android.icu.text.LocaleDisplayNames;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
TextView responseText;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button sendRequest = findViewById(R.id.send_request);
responseText = 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 connection = null;
BufferedReader reader = null;
try {
//获取到HttpURLConnection实例
URL url = new URL("http://www.baidu.com");
connection = (HttpURLConnection) url.openConnection();
//Http请求使用方法:GET和POST。GET表示在服务器那里获取数据,POST表示希望提交数据给服务器
connection.setRequestMethod("GET");
//设置连接超时和读取时长
connection.setConnectTimeout(8000);
connection.setReadTimeout(8000);
//获取到服务器返回的输入流
Log.d("TAG","开始");
InputStream in = connection.getInputStream();
Log.d("TAG","Get");
//对获取到的输入流进行读取
reader = new BufferedReader(new InputStreamReader(in));
Log.d("TAG","Read");
StringBuilder response = new StringBuilder();
String line;
Log.d("TAG","Start");
while((line = reader.readLine()) != null){
response.append(line);
}
Log.d("TAG",response.toString());
showResponse(response.toString());
} catch (Exception e) {
e.printStackTrace();
}finally {
{
if(reader != null){
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(connection != null){
//关闭服务器
connection.disconnect();
}
}
}
}
}).start();
}
private void showResponse(final String response) {
runOnUiThread(new Runnable() {
@Override
public void run() {
//在这里进行UI操作,将结果显示在界面上
responseText.setText(response);
}
});
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<Button
android:id="@+id/send_request"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Send Request" />
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/response_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ScrollView>
</LinearLayout>
使用OkHttp
添加依赖
implementation("com.squareup.okhttp3:okhttp:4.2.0")
@Override
public void onClick(View view) {
if(view.getId() == R.id.send_request){
sendRequestWithOkHttp();
}
}
private void sendRequestWithOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
try {
//创建OkHttpClient实例
OkHttpClient client = new OkHttpClient();
//创建Request对象发起一条HTTP请求
Request request = new Request.Builder().url("http://www.baidu.com").build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
showResponse(responseData);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
解析xml格式数据
Pull解析
private void sendRequestWithOkHttp() {
new Thread(new Runnable() {
@Override
public void run() {
try {
//创建OkHttpClient实例
OkHttpClient client = new OkHttpClient();
//创建Request对象发起一条HTTP请求
Request request = new Request.Builder().url("http://10.0.2.2/get_data.xml").build();
Response response = client.newCall(request).execute();
String responseData = response.body().string();
showResponse(responseData);
parseXMLWithPull(responseData);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
}
private void parseXMLWithPull(String xmlData) {
XmlPullParserFactory factory = null;
try {
factory = XmlPullParserFactory.newInstance();
XmlPullParser xmlPullParser = factory.newPullParser();
xmlPullParser.setInput(new StringReader(xmlData));
int eventType = xmlPullParser.getEventType();
String id = "";
String name = "";
String version = "";
while(eventType != XmlPullParser.END_DOCUMENT){
String nodeName = xmlPullParser.getName();
switch (eventType){
//开始解析某个节点
case XmlPullParser.START_TAG: {
if ("id".equals(nodeName)) {
id = xmlPullParser.nextText();
} else if ("name".equals(nodeName)) {
name = xmlPullParser.nextText();
} else if ("version".equals(nodeName)) {
version = xmlPullParser.nextText();
}
break;
}
//完成解析某个节点
case XmlPullParser.END_TAG:{
if("app".equals(nodeName)){
Log.d("TAG","id is "+id);
Log.d("TAG","name is "+name);
Log.d("TAG","version is "+version);
}
break;
}
default:
break;
}
eventType = xmlPullParser.next();
}
} catch (Exception e) {
e.printStackTrace();
}
}
SAX解析
ContentHanlder.java
package com.example.networktest;
import android.util.Log;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class ContentHandler extends DefaultHandler {
private String nodeName;
private StringBuilder id;
private StringBuilder name;
private StringBuilder version;
@Override
public void startDocument() throws SAXException {
//super.startDocument();
id = new StringBuilder();
name = new StringBuilder();
version = new StringBuilder();
}
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
//super.startElement(uri, localName, qName, attributes);
nodeName = localName;
}
@Override
public void characters(char[] ch, int start, int length) throws SAXException {
//super.characters(ch, start, length);
if("id".equals(nodeName)){
id.append(ch,start,length);
}else if("name".equals(nodeName)){
name.append(ch,start,length);
}else if("version".equals(nodeName)){
version.append(ch,start,length);
}
}
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
//super.endElement(uri, localName, qName);
if("app".equals(localName)){
Log.d("ContentHandler","id is "+id.toString().trim());
Log.d("ContentHandler","name is "+name.toString().trim());
Log.d("ContentHandler","version is "+version.toString().trim());
//清空stringBuilder
id.setLength(0);
name.setLength(0);
version.setLength(0);
}
}
@Override
public void endDocument() throws SAXException {
super.endDocument();
}
}
MainActivity.java
private void parseXMLWithSAX(String xmlData) {
try{
SAXParserFactory factory = SAXParserFactory.newInstance();
XMLReader xmlReader = factory.newSAXParser().getXMLReader();
ContentHandler handler = new ContentHandler();
//将ContentHandler的实例设置到XMLReader中
xmlReader.setContentHandler(handler);
//开始执行解析
xmlReader.parse(new InputSource(new StringReader(xmlData)));
}catch(Exception e){
e.printStackTrace();
}
}
解析JSON格式数据
JSONObject
private void parseJSONWithJSONObject(String jsonData) {
try{
JSONArray jsonArray = new JSONArray(jsonData);
for(int i = 0;i < jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
String id = jsonObject.getString("id");
String name = jsonObject.getString("name");
String version = jsonObject.getString("version");
Log.d("MainActivity","id is "+id);
Log.d("MainActivity","name is "+name);
Log.d("MainActivity","version is "+version);
}
}catch(Exception e){
e.printStackTrace();
}
}
GSON
private void parseJSONWithGSON(String jsonData) {
Gson gson = new Gson();
List<App> appList = gson.fromJson(jsonData,new TypeToken<List<App>>(){}.getType());
for(App app : appList){
Log.d("MainActivity","id is "+app.getId());
Log.d("MainActivity","name is "+app.getName());
Log.d("MainActivity","version is "+app.getVersion());
}
}