学习进度条3.21

news/2025/3/21 22:04:45/文章来源:https://www.cnblogs.com/dynastyeast/p/18785927

所花时间:8小时
代码量:300
搏客量:1
了解到的知识点:
今日尝试了开发一个手机模糊查找的app
buildscript {
repositories {
google()
mavenCentral()
}
dependencies {
classpath "com.android.tools.build:gradle:8.1.0"
}
}

allprojects {
repositories {
google()
mavenCentral()
}
}

task clean(type: Delete) {
delete rootProject.buildDir
}
gradle
plugins {
id 'com.android.application'
}

android {
namespace 'com.example.policysearch'
compileSdk 34

defaultConfig {applicationId "com.example.policysearch"minSdk 24targetSdk 34versionCode 1versionName "1.0"testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'}
}
compileOptions {sourceCompatibility JavaVersion.VERSION_17targetCompatibility JavaVersion.VERSION_17
}

}

dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.11.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'

// MySQL连接(仅用于测试环境)
implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'com.zaxxer:HikariCP:5.0.1'// 异步处理
implementation 'androidx.concurrent:concurrent-futures:1.1.0'testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'

}
public class Policy {
private long id;
private String name;
private String text;

// 构造函数
public Policy(long id, String name, String text) {this.id = id;this.name = name;this.text = text;
}// Getters
public long getId() { return id; }
public String getName() { return name; }
public String getText() { return text; }

}
import android.util.Log;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

public class DatabaseHelper {
private static final String TAG = "DatabaseHelper";
private static final HikariDataSource dataSource;

static {HikariConfig config = new HikariConfig();config.setJdbcUrl("jdbc:mysql://your_server:3306/test");config.setUsername("your_user");config.setPassword("your_password");config.setDriverClassName("com.mysql.cj.jdbc.Driver");dataSource = new HikariDataSource(config);
}public interface SearchCallback {void onResult(List<Policy> policies);void onError(Exception e);
}public static void searchPolicies(String keyword, SearchCallback callback) {Executor executor = Executors.newSingleThreadExecutor();executor.execute(() -> {try (Connection conn = dataSource.getConnection();PreparedStatement ps = conn.prepareStatement("SELECT id, name, text FROM policy WHERE name LIKE ?")) {ps.setString(1, "%" + keyword + "%");ResultSet rs = ps.executeQuery();List<Policy> policies = new ArrayList<>();while (rs.next()) {policies.add(new Policy(rs.getLong("id"),rs.getString("name"),rs.getString("text")));}callback.onResult(policies);} catch (SQLException e) {Log.e(TAG, "Database error", e);callback.onError(e);}});
}

}
import android.content.Intent;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SearchView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.List;

public class MainActivity extends AppCompatActivity {
private ListView listView;
private SearchView searchView;

@Override
protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = findViewById(R.id.listView);searchView = findViewById(R.id.searchView);searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {@Overridepublic boolean onQueryTextSubmit(String query) {performSearch(query);return true;}@Overridepublic boolean onQueryTextChange(String newText) {return false;}});
}private void performSearch(String keyword) {DatabaseHelper.searchPolicies(keyword, new DatabaseHelper.SearchCallback() {@Overridepublic void onResult(List<Policy> policies) {runOnUiThread(() -> {ArrayAdapter<Policy> adapter = new ArrayAdapter<>(MainActivity.this,android.R.layout.simple_list_item_1,policies);listView.setAdapter(adapter);listView.setOnItemClickListener((parent, view, position, id) -> {Policy selected = (Policy) parent.getItemAtPosition(position);Intent intent = new Intent(MainActivity.this, DetailActivity.class);intent.putExtra("policyText", selected.getText());startActivity(intent);});});}@Overridepublic void onError(Exception e) {runOnUiThread(() -> Toast.makeText(MainActivity.this, "搜索失败", Toast.LENGTH_SHORT).show());}});
}

}
import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;

public class DetailActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);

    TextView textView = findViewById(R.id.textView);String policyText = getIntent().getStringExtra("policyText");textView.setText(policyText != null ? policyText : "内容加载失败");
}

}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

P8436 【模板】边双连通分量

P8436 【模板】边双连通分量 题目描述 对于一个 \(n\) 个节点 \(m\) 条无向边的图,请输出其边双连通分量的个数,并且输出每个边双连通分量。 输入格式 第一行,两个整数 \(n\) 和 \(m\)。 接下来 \(m\) 行,每行两个整数 \(u, v\),表示一条无向边。 不保证图为简单图,图中可…

SvelteKit 最新中文文档教程(8)—— 部署 Node 服务端

前言 Svelte,一个语法简洁、入门容易,面向未来的前端框架。 从 Svelte 诞生之初,就备受开发者的喜爱,根据统计,从 2019 年到 2024 年,连续 6 年一直是开发者最感兴趣的前端框架 No.1:Svelte 以其独特的编译时优化机制著称,具有轻量级、高性能、易上手等特性,非常适合构…

第四篇:本地私有化部署大模型(Ollama、vLLM、LMDeploy)

魔塔社区平台介绍 量化:将高精度数值转换成低精度表示的过程(通常用于减少模型的内存和提高推理速度) Ollama部署大模型 linux安装miniconda# 下载 Miniconda 安装脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 运行安装脚本 bash…

用Adobe Illustrator编辑ArcGIS地图的方法

本文介绍在ArcGIS下属的ArcMap软件中,将绘制好的地图导出为.ai或者.eps格式文件,并在Adobe Illustrator软件中进一步编辑地图,并最终导出为图片格式的结果文件的方法~本文介绍在ArcGIS下属的ArcMap软件中,将绘制好的地图导出为.ai或者.eps格式文件,并在Adobe Illustrator软…

协议版iM蓝号检测,批量筛选iMessages数据,无痕检测是否开启iMessage服务

一、实现iMessage数据检测的两种方式:1.人工筛选,将要验证的号码输出到文件中,以逗号分隔。再将文件中的号码粘贴到iMessage客户端的地址栏,iMessage客户端会自动逐个检验该号码是否为iMessage账号,检验速度视网速而定。红色表示不是iMessage账号,蓝色表示iMessage账号。2…

记录项目调用链路

记录项目调用链路 内容 要理清项目中执行链路的调用关系,可以通过以下工具分类实现,涵盖从代码静态分析到运行时动态追踪的全链路管理:一、代码层调用关系分析 1. 静态代码分析工具PyCallGraph(Python) 生成代码调用关系图,直观展示函数调用链路。 pip install pycallgra…

部署kibana

获取kibana安装包 [root@elk1 ~]# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.17.28-amd64.deb[root@elk1 ~]# ls kibana-7.17.28-amd64.deb kibana-7.17.28-amd64.deb# 安装kibana [root@elk1 ~]# dpkg -i kibana-7.17.28-amd64.deb 配置kibana [root@elk…

多线程程序设计(四)——Balking

本文摘要了《Java多线程设计模式》一书中提及的 Balking 模式的适用场景,并针对书中例子(若干名称有微调)给出一份 C++ 参考实现及其 UML 逻辑图,也列出与之相关的模式。 ◆ 适用场景 当线程访问的共享数据没有准备好时,就放弃后续的操作。 ◆ 解决方案 在临界区中判断共享…

A preLaunchTaskC/C++:g++.exe 生成活动文件已终止,退出代码为1。找到一个有点呆的bug

之前突然弹出这个问题,百思不得其解,今天突然发现,因为之前顺便命名了一个c++文件用来暂时装代码的,名字叫做a.cpp,编译器编译的过程中会生成一个可执行文件叫做a.exe,就冲突了,太傻了:-(

2025/3/21 【二叉树】二叉树理论基础节笔记

代码随想录 解题过程中二叉树主要有两种形式: 1. 满二叉树2. 完全二叉树 优先级队列其实是一个堆,堆就是一棵完全二叉树,同时保证父子节点的顺序关系。 二、二叉搜索树 三、平衡二叉搜索树

C语言程序实验二

实验任务1:#include <stdio.h> #include <stdlib.h> #include <time.h>#define N 5int main() {int number;int i;srand(time(0));for(i = 0; i<N; ++i){number = rand()%100 +1;printf("20490042%04d\n", number);}return 0;} 问题1:生成一…

智慧工地合规穿戴监测系统

智慧工地合规穿戴监测系统基于计算机视觉的未佩戴安全帽检测算法通过实时视频流分析,可突破人工监管的物理局限,实现724小时全场景覆盖。该技术通过深度学习模型对人体姿态、头部特征进行精准识别,快速定位违规行为,为安全监管提供数据化、智能化的升级路径。核心算法模型采…