日报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改为%就行


浙公网安备 33010602011771号