网络资源模板--Android Studio 垃圾分类App

目录

一、项目演示

二、项目测试环境

三、项目详情

四、完整的项目源码 


一、项目演示

网络资源模板--垃圾分类App

二、项目测试环境

三、项目详情

登陆注册

  1. 设置点击监听器:当用户点击注册按钮时触发事件。
  2. 获取用户输入:从输入框获取用户名和密码,并去除前后空格。
  3. 日志记录:使用 Log.i 输出用户名和密码,便于调试。
  4. 创建用户服务实例:实例化 UserService,用于处理注册逻辑。
  5. 创建用户对象:设置用户名和密码到 User 对象。
  6. 调用注册方法:通过 userService.register(user) 进行注册操作。
  7. 显示注册成功提示:使用 Toast 显示注册成功的消息。
  8. 跳转到登录界面:启动 LoginActivity,并关闭当前注册活动。
  this.register.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                String trim = RegisterActivity.this.username.getText().toString().trim();
                String trim2 = RegisterActivity.this.password.getText().toString().trim();
                Log.i("TAG", trim + "_" + trim2);
                UserService userService = new UserService(RegisterActivity.this);
                User user = new User();
                user.setUsername(trim);
                user.setPassword(trim2);
                userService.register(user);
                Toast.makeText(RegisterActivity.this, "注册成功", 1).show();
                RegisterActivity.this.startActivity(new Intent(RegisterActivity.this, LoginActivity.class));
                RegisterActivity.this.finish();
            }
        });

### 功能简单总结

1. **用户输入**:用户可以输入用户名和密码。
2. **记住密码**:用户可以选择“记住密码”,登录时自动填充已保存的账户信息。
3. **登录验证**:点击登录按钮后,应用调用 `UserService` 验证输入的用户名和密码。
4. **登录成功**:
   - 如果验证通过,保存用户的选择(是否记住密码)。
   - 跳转到主界面并结束当前活动。
5. **登录失败**:如果验证失败,显示错误提示。
6. **注册跳转**:用户可以点击注册按钮,跳转到注册页面。

 button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View view) {
                String obj = LoginActivity.this.et_account.getText().toString();
                String obj2 = LoginActivity.this.et_password.getText().toString();
                System.out.println(obj);
                System.out.println(obj2);
                Log.i("TAG", obj + "_" + obj2);
                if (new UserService(LoginActivity.this).login(obj, obj2)) {
                    LoginActivity loginActivity = LoginActivity.this;
                    loginActivity.editor = loginActivity.pref.edit();
                    if (LoginActivity.this.rememberPass.isChecked()) {
                        LoginActivity.this.editor.putBoolean("remember_password", true);
                        LoginActivity.this.editor.putString("account", obj);
                        LoginActivity.this.editor.putString("password", obj2);
                    } else {
                        LoginActivity.this.editor.clear();
                    }
                    LoginActivity.this.editor.apply();
                    Log.i("TAG", "登录成功");
                    Toast.makeText(LoginActivity.this, "登陆成功", Toast.LENGTH_SHORT).show();
                    Intent intent = new Intent(LoginActivity.this, MainActivity.class);
                    intent.putExtra("str", obj);
                    LoginActivity.this.startActivity(intent);
                    LoginActivity.this.finish();
                    return;
                }
                Log.i("TAG", "登录失败");
                Toast.makeText(LoginActivity.this, "密码或者用户名输入错误!", Toast.LENGTH_SHORT).show();
            }
        });

首页

### 功能简单总结

1. **界面初始化**:
   - 加载主界面布局并初始化视图组件(如 `SearchView` 和多个 `ImageView`)。

2. **获取传递数据**:
   - 从 Intent 获取字符串参数,以便在活动间传递。

3. **考试功能**:
   - 点击 `exam` 按钮启动 `ExamActivity`,并传递获取的字符串参数。

4. **搜索功能**:
   - 使用 `SearchView` 进行搜索:
     - **提交搜索**:如果输入不为空,启动 `SearchActivity`,传递搜索内容。
     - **输入变化**:不在输入变化时提示用户。

5. **知识库功能**:
   - 点击 `knowledge` 按钮启动 `KnowledgeActivity`,传递字符串参数。

6. **设置功能**:
   - 点击 `settings` 按钮启动 `SettingsActivity`,传递字符串参数。 

  this.search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            public boolean onQueryTextSubmit(String str) {
                if (TextUtils.isEmpty(str)) {
                    Toast.makeText(MainActivity.this, "请输入查找内容!", Toast.LENGTH_SHORT).show();
                    return true;
                }
                Intent intent = new Intent(MainActivity.this, SearchActivity.class);
                intent.putExtra("garbageID", str);
                intent.putExtra("str", stringExtra);
                MainActivity.this.startActivity(intent);
                MainActivity.this.finish();
                return true;
            }

            public boolean onQueryTextChange(String str) {
                if (!TextUtils.isEmpty(str)) {
                    return true;
                }
                Toast.makeText(MainActivity.this, "请输入查找内容!", Toast.LENGTH_SHORT).show();
                return true;
            }
        });

百科页面

展示对应的四个垃圾分类

设置页面

### 功能简单总结

1. **界面初始化**:
   - 加载设置界面布局并初始化视图组件(如 `LinearLayout` 和 `ImageView`)。

2. **强制离线功能**:
   - 点击 **“强制离线”** 按钮发送广播以切换到离线模式。

3. **用户名显示**:
   - 从 Intent 获取用户名并在界面上显示。

4. **版本信息提示**:
   - 点击 **“版本信息”** 按钮时,显示当前版本提示。

5. **用户协议**:
   - 点击 **“用户协议”** 按钮,启动 `AgreementActivity` 并传递用户名。

6. **评价功能**:
   - 点击 **“评价”** 按钮时,显示感谢提示。

7. **主页导航**:
   - 点击 **“主页”** 按钮,启动 `MainActivity` 并传递用户名。

8. **知识库导航**:
   - 点击 **“知识”** 按钮,启动 `KnowledgeActivity` 并传递用户名。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical">

        <ImageView
            android:layout_width="fill_parent"
            android:layout_height="160.0dip"
            android:background="@color/white"
            android:scaleType="fitXY"
            android:src="@drawable/setback" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="0.5"
            android:background="@drawable/setbar_bg"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="67.0dip"
                android:layout_height="50.0dip"
                android:layout_gravity="center"
                android:adjustViewBounds="true"
                android:padding="5.0dip"
                android:src="@drawable/username" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:text="当前用户:"
                android:textSize="25.0dip" />

            <TextView
                android:id="@id/username"
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:textColor="#ff119233"
                android:textSize="25.0dip" />
        </LinearLayout>

        <LinearLayout
        android:id="@+id/agreement"
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="0.5"
            android:background="@drawable/setbar_bg"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="67.0dip"
                android:layout_height="50.0dip"
                android:layout_gravity="center"
                android:adjustViewBounds="true"
                android:padding="5.0dip"
                android:src="@drawable/useragreement" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:text="用户协议"
                android:textSize="25.0dip" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/edition"
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="0.5"
            android:background="@drawable/setbar_bg"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="67.0dip"
                android:layout_height="50.0dip"
                android:layout_gravity="center"
                android:adjustViewBounds="true"
                android:padding="5.0dip"
                android:src="@drawable/edition" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:text="当前版本"
                android:textSize="25.0dip" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/evaluate"
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="0.5"
            android:background="@drawable/setbar_bg"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="67.0dip"
                android:layout_height="50.0dip"
                android:layout_gravity="center"
                android:adjustViewBounds="true"
                android:padding="5.0dip"
                android:src="@drawable/evaluate" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:text="给个好评!"
                android:textSize="25.0dip" />
        </LinearLayout>

        <LinearLayout
            android:id="@+id/ForceOffine"
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="0.5"
            android:background="@drawable/setbar_bg"
            android:orientation="horizontal">

            <ImageView
                android:layout_width="67.0dip"
                android:layout_height="50.0dip"
                android:layout_gravity="center"
                android:adjustViewBounds="true"
                android:padding="5.0dip"
                android:src="@drawable/offine" />

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="fill_parent"
                android:gravity="center_vertical"
                android:text="强制下线"
                android:textSize="25.0dip" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="1.0"
            android:orientation="horizontal" />

        <View
            android:layout_width="fill_parent"
            android:layout_height="2.0dip"
            android:background="@color/black" />

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="0.0dip"
            android:layout_weight="0.5"
            android:orientation="horizontal"
            android:paddingTop="5.0dip">

            <LinearLayout
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:layout_gravity="bottom"
                android:layout_weight="1.0"
                android:gravity="center_horizontal"
                android:orientation="vertical">

                <ImageView
                    android:id="@id/Main"
                    android:layout_width="40.0dip"
                    android:layout_height="30.0dip"
                    android:gravity="center_vertical"
                    android:src="@drawable/home_light" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:gravity="center_vertical"
                    android:text="首页" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:gravity="center_horizontal"
                android:orientation="vertical">

                <ImageView
                    android:id="@id/baike"
                    android:layout_width="40.0dip"
                    android:layout_height="30.0dip"
                    android:src="@drawable/knowledge" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="百科" />
            </LinearLayout>

            <LinearLayout
                android:layout_width="0.0dip"
                android:layout_height="fill_parent"
                android:layout_weight="1.0"
                android:gravity="center_horizontal"
                android:orientation="vertical">

                <ImageView
                    android:id="@id/settings"
                    android:layout_width="40.0dip"
                    android:layout_height="30.0dip"
                    android:adjustViewBounds="true"
                    android:scaleType="fitXY"
                    android:src="@drawable/settings" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="设置" />
            </LinearLayout>
        </LinearLayout>
    </LinearLayout>
</RelativeLayout>

搜索页面

### 功能简单总结

1. **界面初始化**:
   - 加载搜索界面布局并初始化视图组件(如 `ScrollView` 和 `LinearLayout`)。

2. **返回主页**:
   - 点击返回按钮时,启动 `MainActivity` 并传递用户信息。

3. **获取垃圾信息**:
   - 从 Intent 获取垃圾 ID,调用 API 请求垃圾分类信息。

4. **API 请求**:
   - 使用 `HttpUtil` 发送网络请求,获取垃圾分类数据。
   - 处理请求结果:
     - 如果成功,存储数据到 `SharedPreferences` 并展示信息。
     - 如果失败,显示错误提示。

5. **展示垃圾信息**:
   - 清空当前显示的垃圾信息,并从 API 响应中解析出垃圾数据。
   - 动态创建视图,将垃圾名称、类型、解释、样例和注意事项显示在界面上。

6. **错误处理**:
   - 如果未找到垃圾信息或请求失败,给出相应的提示。

 private void showGarbageInfo(GarbageSearch garbageSearch) {
        this.newslayout.removeAllViews();
        // 确保访问的是 result.list
        if (garbageSearch.result.Newslist == null || garbageSearch.result.Newslist.isEmpty()) {
            Toast.makeText(this, "没有找到垃圾信息", Toast.LENGTH_SHORT).show();
            return;
        }
        for (GarbageGSON.News news : garbageSearch.result.Newslist) {
            View inflate = LayoutInflater.from(this).inflate(R.layout.news_items, (ViewGroup) this.newslayout, false);
            TextView textView = (TextView) inflate.findViewById(R.id.type);
            TextView textView2 = (TextView) inflate.findViewById(R.id.explain);
            TextView textView3 = (TextView) inflate.findViewById(R.id.contain);
            TextView textView4 = (TextView) inflate.findViewById(R.id.tip);
            textView.setText("垃圾名称: " + news.name); // 更新为 news.name
            if (news.type == 0) {
                textView.setText("垃圾类型: 可回收垃圾");
            } else if (news.type == 1) {
                textView.setText("垃圾类型: 不回收垃圾");
            } else if (news.type == 2) {
                textView.setText("垃圾类型: 湿垃圾(厨余垃圾)");
            } else if (news.type == 3) {
                textView.setText("垃圾类型: 干垃圾");
            }
            textView2.setText("类型解释: " + news.explain);
            textView3.setText("类型样例: " + news.contain);
            textView4.setText("分类注意: " + news.tip + "\n");
            this.newslayout.addView(inflate);
        }
        this.garbageLayout.setVisibility(View.VISIBLE);
    }

测验页面

### 功能简单总结

1. **界面初始化**:
   - 加载考试界面布局并初始化视图组件(如返回按钮、题目文本和单选按钮组)。

2. **返回主页**:
   - 点击返回按钮时,启动 `MainActivity` 并传递用户信息。

3. **问题和答案初始化**:
   - 使用 `initializeQuestions()` 方法填充问题和答案列表。

4. **随机加载问题**:
   - 在 `loadNewQuestion()` 方法中生成随机数,加载新的垃圾分类问题并更新界面。

5. **答案选择与提交**:
   - 用户选择答案后,点击提交按钮:
     - 检查是否选择了答案,若未选择则提示用户。
     - 获取用户选择的答案并与当前问题的正确答案进行比较。
     - 显示答题结果(正确与否)。

6. **清空选择与加载新问题**:
   - 在每次提交后清空选择并加载新的问题。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@color/light_green"
    android:orientation="vertical">

    <androidx.core.widget.NestedScrollView
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1.0">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <RelativeLayout
                android:layout_width="fill_parent"
                android:layout_height="80.0dip"
                android:orientation="horizontal">

                <ImageView
                    android:id="@+id/iv_back"
                    android:layout_width="30.0dip"
                    android:layout_height="40.0dip"
                    android:layout_centerVertical="true"
                    android:layout_marginLeft="18.0dip"
                    android:padding="3.0dip"
                    android:src="@mipmap/back_black" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:layout_centerInParent="true"
                    android:text="每日一测"
                    android:textColor="#ffb1102d"
                    android:textSize="35.0dip" />
            </RelativeLayout>

            <TextView
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="10.0dip"
                android:text="每道题都只有一个正确选项"
                android:textSize="18.0sp" />

            <TextView
                android:id="@+id/tv_timu"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="10.0dip"
                android:text=""
                android:textColor="#ff333333"
                android:textSize="25.0sp" />

            <RadioGroup
                android:id="@+id/select1_1"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:orientation="vertical">

                <RadioButton
                    android:id="@+id/select1_1_1"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:padding="10.0dip"
                    android:text="A  可回收物"
                    android:textColor="#ff3e79ef"
                    android:textSize="20.0sp" />

                <RadioButton
                    android:id="@+id/select1_1_2"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:padding="10.0dip"
                    android:text="B  干垃圾"
                    android:textColor="#ff1d2a44"
                    android:textSize="20.0sp" />

                <RadioButton
                    android:id="@+id/select1_1_3"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:padding="10.0dip"
                    android:text="C  有害垃圾"
                    android:textColor="#ff8b0a50"
                    android:textSize="20.0sp" />

                <RadioButton
                    android:id="@+id/select1_1_4"
                    android:layout_width="fill_parent"
                    android:layout_height="wrap_content"
                    android:padding="10.0dip"
                    android:text="D  湿垃圾"
                    android:textColor="#ff91ef8a"
                    android:textSize="20.0sp" />
            </RadioGroup>

            <TextView
                android:id="@+id/btn_sub1"
                android:layout_width="150.0dip"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="20.0dip"
                android:background="@drawable/setbar_bg"
                android:paddingLeft="20.0dip"
                android:paddingTop="10.0dip"
                android:paddingRight="20.0dip"
                android:paddingBottom="10.0dip"
                android:text="提交答案"
                android:textColor="@color/black"
                android:textSize="20.0sp" />

            <TextView
                android:id="@+id/answer"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="20.0dip"
                android:layout_marginTop="20.0dip" />
        </LinearLayout>
    </androidx.core.widget.NestedScrollView>

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="120.0dip"
        android:scaleType="fitXY"
        android:src="@mipmap/banner2" />
</LinearLayout>

四、完整的项目源码 

👇👇👇👇👇快捷获取方式👇👇👇👇👇

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/882578.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

HarmonyOS鸿蒙开发实战(5.0)自定义全局弹窗实践

鸿蒙HarmonyOS开发实战往期文章必看&#xff1a; HarmonyOS NEXT应用开发性能实践总结 最新版&#xff01;“非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&#xff01;&#xff08;从零基础入门到精通&#xff09; 非常详细的” 鸿蒙HarmonyOS Next应用开发学习路线&am…

Docker:解决开发运维问题的开源容器化平台

云计算de小白 Docker是一个开源的容器化平台&#xff0c;可以将应用程序及其依赖的环境打包成轻量级、可移植的容器。 Docker为什么这么受欢迎呢?原因很简单&#xff1a;Docker可以解决不同环境一致运行的问题&#xff0c;而且占用资源少&#xff0c;速度快。 所以好的东西…

C++速通LeetCode中等第2题-最长连续序列

方法一&#xff0c;排序后遍历&#xff0c;后减前1&#xff0c;计数&#xff0c; 相等跳过&#xff0c;后减前&#xff01;1就保存。 class Solution { public:int longestConsecutive(vector<int>& nums) {vector<int> ans;int count 1;sort(nums.begin(),n…

ER论文阅读-Decoupled Multimodal Distilling for Emotion Recognition

基本介绍&#xff1a;CVPR, 2023, CCF-A 原文链接&#xff1a;https://openaccess.thecvf.com/content/CVPR2023/papers/Li_Decoupled_Multimodal_Distilling_for_Emotion_Recognition_CVPR_2023_paper.pdf Abstract 多模态情感识别&#xff08;MER&#xff09;旨在通过语言、…

媒体动态:播客增长的重大转变、社交媒体创新和搜索动态

关键亮点&#xff1a; 关键亮点&#xff1a; 电视和音频&#xff1a;播客继续迅速增长&#xff0c;但主要由少数几档节目驱动。付费社交&#xff1a;Meta在最新的一次成功财报电话会议后继续加倍推进AI进展&#xff0c;X起诉GARM和广告商反垄断&#xff0c;Snap的订阅计划继续…

Kubernetes调度单位Pod

Kubernetes调度单位Pod 1 Pod简介 不直接操作容器container。 一个 pod 可包含一或多个容器&#xff08;container&#xff09;&#xff0c;它们共享一个 namespace&#xff08;用户&#xff0c;网络&#xff0c;存储等&#xff09;&#xff0c;其中进程之间通过 localhost 本地…

Python3爬虫教程-HTTP基本原理

HTTP基本原理 1&#xff0c;URL组成部分详解2&#xff0c;HTTP和HTTPS3&#xff0c;HTTP请求过程4&#xff0c;请求&#xff08;Request&#xff09;请求方法&#xff08;Request Method&#xff09;请求的网址&#xff08;Request URL&#xff09;请求头&#xff08;Request H…

简历技能面试问答

变成语言和开发工具 C新特性 自动类型推导 (auto)&#xff1a; 自动推导变量的类型&#xff0c;减少显式类型声明的繁琐 范围 for 循环&#xff1a; 用于遍历容器或数组&#xff0c;简化代码。 nullptr&#xff1a; nullptr 取代 NULL&#xff0c;表示空指针&#xff0c;类…

MCU自动测量单元采集振弦式应变计测值的过程

振弦式应变计是一种广泛应用于土木工程、地质勘探等领域的高精度传感器&#xff0c;用于测量结构的应变变化。近年来&#xff0c;随着微控制器单元(MCU)的发展&#xff0c;自动化测量技术得到了极大的提升&#xff0c;使得振弦式应变计的测值采集更加高效和精确。本文将详细介绍…

Linux中使用cp命令的 -f 选项,但还是提醒覆盖的问题

问题&#xff1a; linux 在执行cp的命令的时候&#xff0c;就算是执行 cp -f 也还是会提醒是否要进行替换。 问题原因&#xff1a; 查看别名&#xff0c;alias命令&#xff0c;看到cp的别名为cp -i&#xff0c;那就是说cp本身就是自带覆盖提醒&#xff0c;就算我们加上-f 的…

频率增强通道注意力机制(FECAM)学习总结

本文提出了一种新的频率增强通道注意力机制&#xff08;FECAM&#xff09;&#xff0c;旨在解决时间序列预测中傅里叶变换因吉布斯现象导致的高频噪声问题。FECAM基于离散余弦变换&#xff0c;能自适应地模拟信道间的频率依赖性&#xff0c;有效避免预测误差。实验显示&#xf…

博睿谷IT认证-订阅试学习

在这个信息爆炸的时代&#xff0c;拥有一张IT认证证书&#xff0c;就像拿到了职场晋升的通行证。博睿谷&#xff0c;作为IT认证培训的佼佼者&#xff0c;帮你轻松拿下华为、Oracle等热门认证。下面&#xff0c;让我们一起看看博睿谷如何助你一臂之力。 学习时间&#xff0c;你说…

巨潮股票爬虫逆向

目标网站 aHR0cDovL3dlYmFwaS5jbmluZm8uY29tLmNuLyMvSVBPTGlzdD9tYXJrZXQ9c3o 一、抓包分析 请求头参数加密 二、逆向分析 下xhr断点 参数生成位置 发现是AES加密&#xff0c;不过是混淆的&#xff0c;但并不影响咱们扣代码 文章仅提供技术交流学习&#xff0c;不可对目标服…

脱离枯燥的CRUD,灵活使用Mybatis,根据mybatis动态的xml片段和接口规范动态生成代理类,轻松应付简单业务场景。

需求 需求是这样的&#xff0c;我们有一个数据服务平台的产品&#xff0c;用户先将数据源信息保存到平台上&#xff0c;一个数据源可以提供多个接口服务&#xff0c;而每个接口服务在数据库中存一个具有mybatis语法的sql片段。这样的话&#xff0c;对于一些简单的业务只需要编…

Linux 文件权限详解与管理

文章目录 前言一、文件权限概述1. 权限表示格式2. 权限组合值 二、查看文件权限三、修改文件所有者与所属组1. 使用 chown 修改文件所有者2. 使用 chgrp 修改文件所属组3. 添加所有者 四、修改文件权限1. 符号方式2. 八进制方式3. 实际修改 总结 前言 在 Linux 系统中&#xf…

香港科技大学广州|金融科技学域博士招生宣讲会——武汉大学、华中科技大学

&#x1f514;&#x1f514;&#x1f514;明日宣讲&#x1f514;&#x1f514;&#x1f514; &#x1f490;香港科技大学广州&#xff5c;金融科技学域博士招生宣讲会 &#x1f4cd;武汉大学专场 &#x1f559;时间&#xff1a;2024年9月24日&#xff08;星期二&#xff09;1…

Java项目实战II基于Java+Spring Boot+MySQL的洗衣店订单管理系统(开发文档+源码+数据库)

目录 一、前言 二、技术介绍 三、系统实现 四、论文参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者 一、前言 随着生活节奏的加快&#xff0c;现代人对便捷、高效服务的需求日益增长&#xff0c;洗衣店作为日常生…

11 - TCPClient实验

在上一个章节的UDP通信测试中&#xff0c;尽管通信的实现过程相对简洁&#xff0c;但出现了通信数据丢包的问题。因此&#xff0c;本章节将基于之前建立的WIFI网络连接&#xff0c;构建一个基础的TCPClient连接机制。我们利用网络调试助手工具来发送数据&#xff0c;测试网络通…

【图虫创意-注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

力扣 困难 154.寻找旋转排序数组中的最小值 II

文章目录 题目介绍题解 题目介绍 题解 题源&#xff1a; 153.寻找旋转排序数组中的最小值 在此基础上&#xff0c;进行二分之前&#xff0c;单独处理一下左指针和最后一个数相同的情况就好了。 class Solution {public int findMin(int[] nums) {int left 0, right nums.le…