IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 14.Android学习之网络编程及Internet应用(二) -> 正文阅读

[移动开发]14.Android学习之网络编程及Internet应用(二)

目录

14.网络编程及Internet应用(二)

2.解析JSON格式数据

2-1.JSON简介

2-2.解析JSON数据

3.使用WebView显示网页

3-1.使用WebView组件浏览网页

3-2.让WebView支持JavaScript

4.难点解答

4-1.GET和POST请求的区别

4-2.WebView支持JavaScript与不支持的区别


14.网络编程及Internet应用(二)

2.解析JSON格式数据

2-1.JSON简介

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,其语法简洁,不仅易于阅读和编写,而且也易于机器的解析和生成。

JSON通常由两种数据结构组成,一种是对象 (“名称/值”形式的映射),另一种是数组(值的有序列表)。ISON 没有变量或其他控制,只用于数据传输。

◆对象

在JSON中,可以使用下面的语法格式来定义对象。

{“属性1”:属性值1,“属性2”:属性值2......“属性n”:属性值n}

◎属性1~属性n:用于指定对象拥有的属性名。

◎属性值1~属性值n:用于指定各属性对应的属性值,其值可以是字符串、数字、布尔值(true/false)、null、 对象和数组。

例如,定义一个保存名人信息的对象,可以使用下面的代码:

{
"name" :"扎克伯格",
"address": "United States New York",
"wellknownsaying" :"当你有使命,它会让你更专注”
}

◆数组

在JSON中,可以使用下面的语法格式来定义对象。

{"数组名":[
对象1,对象2......,对象n
]}

◎数组名:用于指定当前数组名。

◎对象1~对象n:用于指定各数组元素,它的值为合法的JSON对象。例如,定义一个保存名人信息的数组,可以使用下面的代码:

{"famousPerson" :[
{"name":"扎克伯格","address":"美国","wellknownsaying":" 当你有使命,它会让你更专注"},
{"name":"马云","address":"中国","wellknownsaying":"心中无敌者,无敌于天下"}
]}

2-2.解析JSON数据

在Android的官网中提供了解析JSON数据的JSONObject和JSONArray对象。其中,JSONObject用于解析JSON对象;JSONArray用于解析JSON数组。

例:

?MainActivity.java

package com.example.analysisofjsondata;
?
import androidx.annotation.NonNull;
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
?
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.TextView;
?
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
?
public class MainActivity extends AppCompatActivity {
 ? ?private TextView step,step1,time,time1,heat,heat1,km,km1;
 ? ?private Handler handler;
 ? ?private String result="";//显示内容
?
 ? ?@Override
 ? ?protected void onCreate(Bundle savedInstanceState) {
 ? ? ? ?super.onCreate(savedInstanceState);
 ? ? ? ?setContentView(R.layout.activity_main);
 ? ? ? ?ActionBar actionBar=getSupportActionBar();
 ? ? ? ?actionBar.hide();
?
 ? ? ? ?step=findViewById(R.id.main_tv1);
 ? ? ? ?time=findViewById(R.id.main_tv2);
 ? ? ? ?heat=findViewById(R.id.main_tv3);
 ? ? ? ?km=findViewById(R.id.main_tv4);
 ? ? ? ?step1=findViewById(R.id.main_tv5);
 ? ? ? ?time1=findViewById(R.id.main_tv6);
 ? ? ? ?heat1=findViewById(R.id.main_tv7);
 ? ? ? ?km1=findViewById(R.id.main_tv8);
?
 ? ? ? ?handler=new Handler(){//解析返回的JSON数组并显示
 ? ? ? ? ? ?@Override
 ? ? ? ? ? ?public void handleMessage(@NonNull Message msg) {
 ? ? ? ? ? ? ? ?//解析返回的JSON串数据并显示
 ? ? ? ? ? ? ? ?TextView[][] textViews={{step,time,heat,km},{step1,time1,heat1,km1}};
 ? ? ? ? ? ? ? ?try {
 ? ? ? ? ? ? ? ? ? ?JSONArray jsonArray=new JSONArray(result);//获取JSONArray数组
 ? ? ? ? ? ? ? ? ? ?for(int i=0;i<jsonArray.length();i++){
 ? ? ? ? ? ? ? ? ? ? ? ?JSONObject jsonObject=jsonArray.getJSONObject(i);
 ? ? ? ? ? ? ? ? ? ? ? ?textViews[i][0].setText(jsonObject.getString("step"));
 ? ? ? ? ? ? ? ? ? ? ? ?textViews[i][1].setText(jsonObject.getString("time"));
 ? ? ? ? ? ? ? ? ? ? ? ?textViews[i][2].setText(jsonObject.getString("heat"));
 ? ? ? ? ? ? ? ? ? ? ? ?textViews[i][3].setText(jsonObject.getString("km"));
?
 ? ? ? ? ? ? ? ? ?  }
 ? ? ? ? ? ? ?  } catch (JSONException e) {
 ? ? ? ? ? ? ? ? ? ?e.printStackTrace();
 ? ? ? ? ? ? ?  }
 ? ? ? ? ? ? ? ?super.handleMessage(msg);
 ? ? ? ? ?  }
 ? ? ?  };
?
 ? ? ? ?//创建一个线程,用于从服务器中获取JSON数组
 ? ? ? ?new Thread(new Runnable() {
 ? ? ? ? ? ?@Override
 ? ? ? ? ? ?public void run() {
 ? ? ? ? ? ? ? ?send();
 ? ? ? ? ? ? ? ?Message message=handler.obtainMessage();
 ? ? ? ? ? ? ? ?handler.sendMessage(message);
 ? ? ? ? ?  }
 ? ? ?  }).start();
 ?  }
?
 ? ?private void send(){
 ? ? ? ?//要发送请求的服务器地址
 ? ? ? ?String target="http://192.168.3.19:8080/example/index.json";
 ? ? ? ?URL url;
 ? ? ? ?try {
 ? ? ? ? ? ?url=new URL(target);
 ? ? ? ? ? ?HttpURLConnection urlConnection= (HttpURLConnection) url.openConnection();
 ? ? ? ? ? ?urlConnection.setRequestMethod("POST");
 ? ? ? ? ? ?urlConnection.setDoOutput(true);//从连接中读取数据
 ? ? ? ? ? ?urlConnection.setUseCaches(false);//禁止缓存
 ? ? ? ? ? ?urlConnection.setInstanceFollowRedirects(true);//自动执行HTTP重定向
 ? ? ? ? ? ?//获得读取的内容
 ? ? ? ? ? ?InputStreamReader inputStreamReader=new InputStreamReader(urlConnection.getInputStream());
 ? ? ? ? ? ?//获取输入流对象
 ? ? ? ? ? ?BufferedReader bufferedReader=new BufferedReader(inputStreamReader);
 ? ? ? ? ? ?String inputLine=null;
 ? ? ? ? ? ?while ((inputLine=bufferedReader.readLine())!=null){
 ? ? ? ? ? ? ? ?result+=inputLine;
 ? ? ? ? ?  }
 ? ? ? ? ? ?inputStreamReader.close();
 ? ? ? ? ? ?urlConnection.disconnect();//断开连接
 ? ? ?  } catch (MalformedURLException e) {
 ? ? ? ? ? ?e.printStackTrace();
 ? ? ?  } catch (IOException e) {
 ? ? ? ? ? ?e.printStackTrace();
 ? ? ?  }
 ?  }
}

AndroidManifest.xml

<!-- ?  访问网络-->
<uses-permission android:name="android.permission.INTERNET"/>

<application>节点下:

android:usesCleartextTraffic="true"

在Tomcat安装路径的webapps文件夹中新建一个文件夹,命名为example,在example文件夹下新建一个.json文件,命名为index.json,在index.json中编写JSON数组:

[{"step":"12,672","time":"1h 58m","heat":"306","km":"8.3"},
{"step":"73,885","time":"11h 41m","heat":"1,771","km":"48.7"}]

运行Tomcat,连接真机运行Android项目。

3.使用WebView显示网页

Android提供了内置的浏览器,该浏览器使用了开源的WebKit引擎。WebKit 不仅能够搜索网址、查看电子邮件,而且能够播放视频节目。在Android中,要使用内置的浏览器,需要通过WebView组件来实现。通过WebView组件可以轻松实现显示网页功能。

3-1.使用WebView组件浏览网页

WebView组件是专门用来浏览网页的,其使用方法与其他组件一样,既可以在XML布局文件中使用<WebView>标记添加,又可以在Java文件中通过new关键字创建。推荐采用<WebView>标记在XML布局文件中添加。在XML布局文件中添加一个WebView组件可以使用下面的代码:

<WebView
 ? ? ? ? android:id="@+id/webView1"
 ? ? ? ? android:layout_width="match_parent"
 ? ? ? ? android:layout_height="match_parent"/>

添加WebView组件后,就可以应用该组件提供的方法来执行浏览器操作了。WebView 组件提供的常用方法如表14.3所示。

表14.3 WebView组件提供的常用方法

方法描述
loadUrl(String url)用于加载指定URL对应的网页
loadData(String data, String mimeType, String encoding)用于将指定的字符串数据加载到浏览器中
loadDataWithBaseURL(String baseUrl, String data, String mimeType, String encoding, String historyUrl)用于基于URL加载指定的数据
capturePicture()用于创建当前屏幕的快照
goBack()执行后退操作,相当于浏览器上的后退按钮的功能
goForward()执行前进操作,相当于浏览器上的前进按钮的功能
stopLoading()用于停止加载当前页面
reload()用于刷新当前页面

例:

?activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 ? ?xmlns:app="http://schemas.android.com/apk/res-auto"
 ? ?xmlns:tools="http://schemas.android.com/tools"
 ? ?android:layout_width="match_parent"
 ? ?android:layout_height="match_parent"
 ? ?tools:context=".MainActivity">
?
 ? ?<WebView
 ? ? ? ?android:id="@+id/main_wv1"
 ? ? ? ?android:layout_width="match_parent"
 ? ? ? ?android:layout_height="match_parent"/>
</RelativeLayout>

MainActivity.java

package com.example.webview;
?
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
?
import android.os.Bundle;
import android.view.WindowManager;
import android.webkit.WebView;
?
public class MainActivity extends AppCompatActivity {
?
 ? ?@Override
 ? ?protected void onCreate(Bundle savedInstanceState) {
 ? ? ? ?super.onCreate(savedInstanceState);
 ? ? ? ?setContentView(R.layout.activity_main);
 ? ? ? ?ActionBar actionBar=getSupportActionBar();
 ? ? ? ?actionBar.hide();
 ? ? ? ?getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
 ? ? ? ? ? ? ? ?WindowManager.LayoutParams.FLAG_FULLSCREEN);
 ? ? ? ?WebView webView=findViewById(R.id.main_wv1);
 ? ? ? ?webView.loadUrl("https://developer.android.google.cn/reference/");//指定要加载的网页
 ? ? ? ?webView.getSettings().setUseWideViewPort(true);//设置此属性可按任意比例缩放
 ? ? ? ?webView.getSettings().setLoadWithOverviewMode(true);//设置加载内容自适应屏幕
 ? ? ? ?//支持放大和缩小网页功能
 ? ? ? ?webView.getSettings().setSupportZoom(true);
 ? ? ? ?webView.getSettings().setBuiltInZoomControls(true);
 ?  }
}

AndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

<application>节点下:

android:usesCleartextTraffic="true"

3-2.让WebView支持JavaScript

在默认的情况下,WebView 组件是不支持JavaScript的,但是在运行某些不得不使用JavaScript代码的网站时,需要让WebView支持JavaScript。

实际上,让WebView组件支持JavaScript,只需要以下两个步骤就可以实现。

(1)使用WebView组件的WebSettings对象提供的setJavaScriptEnabled()方法让JavaScript可用。例如,要在一个名称为webview的WebView组件中允许使用JavaScript,可以使用下面的代码:

webview.getSettings().setJavaScriptEnabled(true);//设置JavaScript可用

(2)经过以上设置后,网页中的大部分JavaScript代码均可用。但是,对于通过window.alert()方法弹出的对话框并不可用。要想显示弹出的对话框,需要使用WebView组件的setWebChromeClient()方法来处理JavaScript的对话框,具体代码如下:

webview.setWebChromeClient(new WebChromeClient());

这样设置后,再使用WebView显示带弹出JavaScript 对话框的网页时,网页中弹出的对话框将不会被屏蔽掉。

例:

?MainActivity.java

package com.example.webviewandjavascript;
?
import androidx.appcompat.app.ActionBar;
import androidx.appcompat.app.AppCompatActivity;
?
import android.os.Bundle;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
?
public class MainActivity extends AppCompatActivity {
?
 ? ?@Override
 ? ?protected void onCreate(Bundle savedInstanceState) {
 ? ? ? ?super.onCreate(savedInstanceState);
 ? ? ? ?setContentView(R.layout.activity_main);
 ? ? ? ?ActionBar actionBar=getSupportActionBar();
 ? ? ? ?actionBar.hide();
?
 ? ? ? ?WebView webView=findViewById(R.id.main_wv1);
 ? ? ? ?webView.loadUrl("http://192.168.3.19:8080/example/javascript.jsp");
 ? ? ? ?webView.getSettings().setJavaScriptEnabled(true);//设置Javascript可用
 ? ? ? ?webView.setWebChromeClient(new WebChromeClient());//设置处理JavaScript中的对话框
 ?  }
}

AndrioidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/>

<application>节点下:

android:usesCleartextTraffic="true"

在Tomcat安装路径的webapps文件夹中新建一个文件夹,命名为example,在example文件夹下新建一个.jsp文件,命名为javascript.jsp,在javascript.jsp中编写代码:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<style type="text/css">
    ul{
        padding-top:30px;
        column-width:30%;}
    li{
        list-style:none;
        float:left;
        width:30%;
        color:#FFFFFF;
        font-size:26px;
font-family:微软雅黑;
}
        textarea{
            border:0px;
width:98%;
            
            }
        body{
padding:0px;
            margin:0 auto;
            width:100%;
background:#e3e3e3;
            
        }
            a{
                text-decoration:none;
                color:#4A8FFF;
                }
div{
margin:0px;
}
</style>
<script language="javascript">
function check(){
    var v=form1.content.value;
    if(v==""){
        alert("请输入说说内容!");
        }else{
            alert("输入的说说内容为:"+v);
            form1.submit();
            }
}
</script>
</head>
?
<body>
 ?      <div style="height:90px;background:#3d4760;">
 ? ? ? ?<ul>
 ? ? ? ?<li>取消</li><li style="text-align:center">写说说</li><li style=" text-align:right"><a href="#" onclick="check()" >发表</a></li>
 ? ? ? ?</ul>
 ? ?
 ? ? ?</div>
    <form id="form1" name="form1" method="post" action="" onsubmit="return check()">
     ?<textarea name="content" id="content" ?rows="5" title="写点什么吧"></textarea>
</form> ?
<div><img src="bottom2.png" width="100%" ?/></div> ? ?
?
</body>
</html>

4.难点解答

4-1.GET和POST请求的区别

HTTP请求通常分为GET和POST请求两种,二者之间的主要区别如表14.4所示。

表14.4 GET与POST的区别

GETPOST
能被缓存不能被缓存
参数保留在测览器历史中参数不保留在浏览器历史中
URL长度受浏览器限制(例如IE浏览器限制最大的长度为2048个字符)URL长度不受限制
数据在URL中对所有人可见数据不会显示在URL中
只允许传递ASCII字符没有限制,也允许二进制数据

4-2.WebView支持JavaScript与不支持的区别

在WebView不支持JavaScript 情况下,运行一个包含JavaScript 代码的网站时将显示如下图1所示的效果,图片无法正常显示,且轮播图静止。在WebView支持JavaScript 情况下,运行一个包含JavaScript 代码的网站时将显示如下图2所示的效果。

?

?

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:55:38  更:2022-08-06 10:57:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:46:31-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码