日报2025321

今日课堂检测,完成android studio运行服务器并在手机端对服务器数据库进行访问
跟之前的单as实现本地数据库增删改查类似除外
还有必要的文件
dependencies引入

    implementation("mysql:mysql-connector-java:5.1.47")
    implementation 'org.nanohttpd:nanohttpd:2.3.1'
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'

SimpleServer

package com.example.a2025321;

import android.util.Log;

import java.io.IOException;
import java.util.Map;

import fi.iki.elonen.NanoHTTPD;

public class SimpleServer extends NanoHTTPD {

    public SimpleServer(int port) {
        super(port);
    }

    @Override
    public Response serve(IHTTPSession session) {
        String uri = session.getUri();
        Map<String, String> params = session.getParms();

        // 处理请求
        if (uri.equals("/search")) {
            String keyword = params.get("keyword");
            Log.d("SimpleServer", "Received keyword: " + keyword);

            // 模拟数据库查询
            String response = "[{\"id\":1,\"name\":\"科技创新政策\",\"pubdata\":\"2023-01-01\",\"text\":\"这是一项关于科技创新的政策...\"}]";
            return newFixedLengthResponse(Response.Status.OK, "application/json", response);
        }

        return newFixedLengthResponse(Response.Status.NOT_FOUND, "text/plain", "Not Found");
    }
}

在MainActivity中修改,调用SimpleServer开启服务器:

package com.example.a2025321;

import android.content.Intent;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.a2025321.pojo.Policy;

import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import retrofit2.Retrofit;
import retrofit2.converter.gson.GsonConverterFactory;

public class MainActivity extends AppCompatActivity {

    private EditText searchEditText;
    private RecyclerView policyRecyclerView;
    private PolicyAdapter policyAdapter;
    private List<Policy> policyList = new ArrayList<>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // 启动服务器
        SimpleServer server = new SimpleServer(8080);
        try {
            server.start();
            Toast.makeText(this, "服务器已启动", Toast.LENGTH_SHORT).show();
        } catch (IOException e) {
            e.printStackTrace();
            Toast.makeText(this, "服务器启动失败", Toast.LENGTH_SHORT).show();
        }

        // 初始化视图
        searchEditText = findViewById(R.id.searchEditText);
        policyRecyclerView = findViewById(R.id.policyRecyclerView);
        findViewById(R.id.searchButton).setOnClickListener(v -> searchPolicies());

        // 设置 RecyclerView
        policyRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        policyAdapter = new PolicyAdapter(policyList, this::onPolicyItemClick);
        policyRecyclerView.setAdapter(policyAdapter);
    }

    // 查询政策
    private void searchPolicies() {
        String keyword = searchEditText.getText().toString().trim();
        if (keyword.isEmpty()) {
            Toast.makeText(this, "请输入关键字", Toast.LENGTH_SHORT).show();
            return;
        }

        // 开启新线程执行数据库操作
        new Thread(() -> {
            Connection con = null;
            PreparedStatement ps = null;
            ResultSet rs = null;

            try {
                // 获取数据库连接
                con = JDBCHelper.getCon();
                if (con == null) {
                    runOnUiThread(() -> Toast.makeText(MainActivity.this, "数据库连接失败", Toast.LENGTH_SHORT).show());
                    return;
                }

                // 执行模糊查询
                String sql = "SELECT * FROM policy WHERE name LIKE ? OR text LIKE ?";
                ps = con.prepareStatement(sql);
                ps.setString(1, "%" + keyword + "%");
                ps.setString(2, "%" + keyword + "%");
                rs = ps.executeQuery();

                // 解析查询结果
                List<Policy> result = new ArrayList<>();
                while (rs.next()) {
                    Policy policy = new Policy();
                    policy.setId(rs.getLong("id"));
                    policy.setName(rs.getString("name"));
                    policy.setPubdata(rs.getDate("pubdata"));
                    policy.setText(rs.getString("text"));
                    result.add(policy);
                }

                // 更新 UI
                runOnUiThread(() -> {
                    if (result.isEmpty()) {
                        Toast.makeText(MainActivity.this, "未找到相关政策", Toast.LENGTH_SHORT).show();
                    } else {
                        policyAdapter.updateData(result);
                    }
                });
            } catch (SQLException e) {
                e.printStackTrace();
                runOnUiThread(() -> Toast.makeText(MainActivity.this, "查询失败", Toast.LENGTH_SHORT).show());
            } finally {
                // 释放资源
                try {
                    if (rs != null) rs.close();
                    if (ps != null) ps.close();
                    if (con != null) con.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }).start();
    }


    // 点击政策条目
    private void onPolicyItemClick(Policy policy) {
        Intent intent = new Intent(this, PolicyDetailActivity.class);
        intent.putExtra("policy_text", policy.getText());
        startActivity(intent);
    }
}

再就是修改Mysql的账号连接许可
如果有可视化操作软件那么直接将localhost改为%就行

posted @ 2025-03-21 22:48  花落水无痕  阅读(19)  评论(0)    收藏  举报