学习进度条

今日所花时间:一小时
今日代码量:100行
博客量:一篇
了解到的知识点:如何将已经在web端成功的简单项目,部署到手机端 在终端解决8080端口被占用的问题
要解决端口8080被占用的问题,可以按照以下步骤操作:

  1. 查找占用端口的进程
    使用以下命令查找占用8080端口的进程:
    Windows:
    netstat -ano | findstr :8080
    这将列出使用8080端口的进程ID (PID)。
  2. 终止占用端口的进程
    找到PID后,使用以下命令终止进程:
    Windows:
    taskkill /PID /F
    替换为实际的进程ID。
  3. 更改应用程序端口
    如果不想终止进程,可以更改应用程序的端口。在Spring Boot项目中,修改application.properties或application.yml文件:
    application.properties:
    server.port=8081
  4. 重启应用程序
    更改端口后,重启应用程序即可。

将web端项目部署到手机端
将周五课堂极限测试写好的web项目放到手机端
web端详细代码在上一篇博客中
下载AndroidStudio
创建EmptyViewsActivity项目
在MainActivity中书写如下代码

package com.example.myapplication;

import android.os.Bundle;
import android.util.Log;
import android.webkit.WebResourceError;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this); // 启用 EdgeToEdge(确保在 setContentView 之前)
        setContentView(R.layout.activity_main); // 只调用一次 setContentView

        // 初始化 WebView
        WebView webView = findViewById(R.id.webview);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true); // 启用 JavaScript
        webSettings.setDomStorageEnabled(true); // 启用 DOM 存储
        webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); // 启用缓存

        // 设置 WebViewClient 处理页面加载事件
        webView.setWebViewClient(new WebViewClient() {
            @Override
            public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
                super.onReceivedError(view, request, error);
                Log.e("WebViewError", "Error loading page: " + error.getDescription());
                Toast.makeText(MainActivity.this, "加载失败,请检查网络连接", Toast.LENGTH_LONG).show();
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                super.onPageFinished(view, url);
                Log.d("WebViewDebug", "Page loaded: " + url);
            }
        });

        // 加载本地 Spring Boot 后端地址(模拟器用 10.0.2.2,真机用电脑的局域网 IP)
        String serverUrl = "http://192.168.210.118:8080";
        webView.loadUrl(serverUrl);

        // 处理 EdgeToEdge 的 WindowInsets
        ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> {
            Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
            v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom);
            return insets;
        });
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"

    tools:context=".MainActivity">
    <WebView
        android:id="@+id/webview"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

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

    <application
        android:allowBackup="true"
        android:usesCleartextTraffic="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/Theme.MyApplication"
        tools:targetApi="31">


        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

按照上述操作运行前后端程序能够用WebView在Android应用中嵌入Web内容,然后在AndroidStudio的虚拟设备上实现对应功能。

posted @ 2025-03-09 21:04  haoyinuo  阅读(14)  评论(0)    收藏  举报