学习进度条3.21
所花时间: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 24
targetSdk 34
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_17
targetCompatibility 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() {
@Override
public boolean onQueryTextSubmit(String query) {
performSearch(query);
return true;
}
@Override
public boolean onQueryTextChange(String newText) {
return false;
}
});
}
private void performSearch(String keyword) {
DatabaseHelper.searchPolicies(keyword, new DatabaseHelper.SearchCallback() {
@Override
public 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);
});
});
}
@Override
public 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 : "内容加载失败");
}
}

浙公网安备 33010602011771号