暑假最终作业代码

暑假作业代码

活动代码文件:

package com.example.homework;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;

import android.app.AlertDialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.Toast;

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;


public class MainActivity extends AppCompatActivity {
    public String result;
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.main,menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(@NonNull MenuItem item) {
        switch(item.getItemId()) {//item.getItemId()方法判断我们点击是哪一个菜单选项
            case R.id.help:
                InputStream is = null;
                try {
                    is = getAssets().open("help.txt");
                } catch (IOException e) {
                    e.printStackTrace();
                }
                int lenght = 0;
                try {
                    lenght = is.available();
                } catch (IOException e) {
                    e.printStackTrace();
                }
                byte[]  buffer = new byte[lenght];

                try {
                    is.read(buffer);
                     result =  new String(buffer, "gbk");
                } catch (UnsupportedEncodingException e) {
                    e.printStackTrace();
                } catch (IOException e) {
                    e.printStackTrace();
                }


                AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.this);
                dialog.setTitle("help文档");
                dialog.setMessage(result);
                dialog.setCancelable(true);//设置是否通过返回键取消对话框

                //设置点击“是”按钮之后的点击事件
                dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        Toast.makeText(MainActivity.this, "感谢观看", Toast.LENGTH_SHORT).show();
                    }
                });

                //显示出对话框
                dialog.show();


                  break;

            default:
        }
        return true;

    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView wv = (WebView) findViewById(R.id.wv);
        //获取webSettings
        WebSettings settings = wv.getSettings();
        //让webView支持JS
        settings.setJavaScriptEnabled(true);
        wv.setWebViewClient(new WebViewClient());
        //初始化控件
        Button btn1 = (Button) findViewById(R.id.btn1);
        Button btn2 = (Button) findViewById(R.id.btn2);
        btn1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                WebView wv = (WebView) findViewById(R.id.wv);
                wv.loadUrl("javascript:message()");
            }
        });
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //将要传递的数据进行封装
                String data="Android中的数据";
                WebView wv = (WebView) findViewById(R.id.wv);

                wv.loadUrl("javascript:message2('"+data+"')");
            }
        });



        //加载本地assets目录下的静态网页
        wv.loadUrl("file:///android_asset/index.html");
        //第一个参数把自身传给js 第二个参数是this的一个名字
        //这个方法用于让H5调用android方法
        wv.addJavascriptInterface(this, "android");
    }

    //下面的两个方法是让网页来调的
    //这个注解必须加 因为 兼容问题
    @JavascriptInterface
    public void setMessage(){
        Toast.makeText(this, "没有数据传入", Toast.LENGTH_SHORT).show();
    }

    @JavascriptInterface
    public void setMessage(String data) {
        Toast.makeText(this, "传入数据是:" + data, Toast.LENGTH_SHORT).show();
    }
}

布局文件:


<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp">
        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:id="@+id/btn1"
            android:text="不传入数据到HTML"/>
        <Button
            android:layout_width="0dp"
            android:layout_weight="1"
            android:layout_height="match_parent"
            android:text="传入数据到HTML"
            android:id="@+id/btn2"/>
    LinearLayout>
    <WebView
        android:id="@+id/wv"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="9" />
LinearLayout>

index.html文件


<html>
<head>
    <meta charset="utf-8" />
    <title>Demotitle>
head>
<body>

<button id="btn0">不传入数据到Androidbutton>
<button id="btn1">传入数据到Androidbutton>
br>
br>

<div id="content">div>

body>

<script type="text/javascript">
        var data = "Html中的数据"
        document.getElementById("btn0").onclick = function(){
//android是传过来的对象名称,setmessage是android中的方法
            android.setMessage();
        };
        document.getElementById("btn1").onclick = function(){
//android是传过来的对象名称,setmessage是android中的方法
                android.setMessage(data);
        };

        var content = document.getElementById("content");

        function message(){
            content.innerHTML = "未传入数据到HTML";
        };

        function message2(data){
            content.innerHTML = "已传入数据:"+data+",到HTML";
        };
    script>
html>

help.txt文件

    我的设计思路

明确APP需求:实现APP与网页文件数据互传
需求解析:实现安卓传送数据到网页,网页传
送数据到安卓中
实现方案:在HTML文件的javascript中,
定义两个方法, message()与方法 
message2(),前者有参数数据
后者没有参数数据。在安卓文件中道理相同。
在HTML中定义了String数据:
“HTML中的数据”。
在Android中定义了String数据:
“Android中的数据”。
将String数据通过参数形式进行传递。
         核心思想
在安卓中定义方法供HTML使用,来显示HTML
中的数据;在HTML中定义方法供安卓使用,
来显示安卓中的数据。

暑假最终作业代码_第1张图片

暑假最终作业代码_第2张图片

你可能感兴趣的:(暑假最终作业代码)