学习进度条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 : "内容加载失败");
}

}

posted @ 2025-03-21 22:04  仙人兵马俑  阅读(17)  评论(0)    收藏  举报