You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从MySQL数据库取数据并在Android表格中展示?(含tableview依赖)

从MySQL获取数据并展示到Android TableView(de.codecrafters.tableview:2.8.0)

别担心,我一步步教你把MySQL里的数据通过JSON展示到这个TableView组件里,流程清晰还带代码示例,照着来就行~

1. 准备工作先做好

首先得确保你的项目配置没问题:

  • 添加网络权限:在AndroidManifest.xml里加上互联网权限,不然没法请求后端接口
<uses-permission android:name="android.permission.INTERNET" />
  • 添加依赖:你已经加了TableView的依赖,再补个网络请求的依赖(比如OkHttp,方便发请求拿JSON),在build.gradle(Module level)里:
dependencies {
    // 你的TableView依赖
    implementation 'de.codecrafters.tableview:tableview:2.8.0'
    // OkHttp网络请求
    implementation 'com.squareup.okhttp3:okhttp:4.11.0'
}

2. 创建实体类对应JSON数据

先写个User类,把JSON里的字段对应上,方便后续解析:

public class User {
    private String sl;
    private String userId;
    private String email;
    private String password;
    private String name;
    private String gender;
    private String phone;
    private String lvl;
    private String stat;

    // 构造方法
    public User(String sl, String userId, String email, String password, String name, String gender, String phone, String lvl, String stat) {
        this.sl = sl;
        this.userId = userId;
        this.email = email;
        this.password = password;
        this.name = name;
        this.gender = gender;
        this.phone = phone;
        this.lvl = lvl;
        this.stat = stat;
    }

    // 所有字段的getter方法(TableView需要获取这些值来展示)
    public String getSl() { return sl; }
    public String getUserId() { return userId; }
    public String getEmail() { return email; }
    public String getPassword() { return password; }
    public String getName() { return name; }
    public String getGender() { return gender; }
    public String getPhone() { return phone; }
    public String getLvl() { return lvl; }
    public String getStat() { return stat; }
}

3. 网络请求获取并解析JSON数据

用OkHttp写个异步请求,从你的后端接口拿到JSON,然后解析成List<User>集合:

// 在Activity/Fragment里写这个方法
private void fetchUserData() {
    OkHttpClient client = new OkHttpClient();
    // 替换成你的后端接口地址(返回你提供的JSON格式)
    Request request = new Request.Builder()
            .url("https://your-backend-url/get-users")
            .build();

    client.newCall(request).enqueue(new Callback() {
        @Override
        public void onFailure(@NonNull Call call, @NonNull IOException e) {
            // 请求失败的处理,比如Toast提示
            runOnUiThread(() -> Toast.makeText(MainActivity.this, "请求失败:" + e.getMessage(), Toast.LENGTH_SHORT).show());
        }

        @Override
        public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
            if (response.isSuccessful() && response.body() != null) {
                String jsonStr = response.body().string();
                List<User> userList = parseJsonToUserList(jsonStr);
                
                // 回到主线程更新UI(TableView必须在主线程操作)
                runOnUiThread(() -> setupTableView(userList));
            }
        }
    });
}

// 解析JSON字符串成User列表
private List<User> parseJsonToUserList(String jsonStr) {
    List<User> userList = new ArrayList<>();
    try {
        JSONObject jsonObject = new JSONObject(jsonStr);
        JSONArray resultArray = jsonObject.getJSONArray("result");
        
        for (int i = 0; i < resultArray.length(); i++) {
            JSONObject userObj = resultArray.getJSONObject(i);
            User user = new User(
                    userObj.getString("sl"),
                    userObj.getString("user_id"),
                    userObj.getString("email"),
                    userObj.getString("password"),
                    userObj.getString("name"),
                    userObj.getString("gender"),
                    userObj.getString("phone"),
                    userObj.getString("lvl"),
                    userObj.getString("stat")
            );
            userList.add(user);
        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
    return userList;
}

4. 配置TableView并填充数据

首先在布局文件(比如activity_main.xml)里添加TableView:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">

    <de.codecrafters.tableview.TableView
        android:id="@+id/user_table_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

</LinearLayout>

然后写setupTableView方法,配置列标题、数据适配器:

private void setupTableView(List<User> userList) {
    TableView<User> tableView = findViewById(R.id.user_table_view);

    // 1. 设置列标题
    String[] columnHeaders = {"序号", "用户ID", "邮箱", "姓名", "性别", "电话", "等级", "状态", "密码"};
    tableView.setHeaderAdapter(new SimpleTableHeaderAdapter(this, columnHeaders));

    // 2. 把User列表转成TableView需要的二维数组(SimpleTableDataAdapter要求格式)
    Object[][] tableData = new Object[userList.size()][9];
    for (int i = 0; i < userList.size(); i++) {
        User user = userList.get(i);
        tableData[i][0] = user.getSl();
        tableData[i][1] = user.getUserId();
        tableData[i][2] = user.getEmail();
        tableData[i][3] = user.getName();
        tableData[i][4] = user.getGender();
        tableData[i][5] = user.getPhone();
        tableData[i][6] = user.getLvl();
        tableData[i][7] = user.getStat();
        tableData[i][8] = user.getPassword();
    }

    // 3. 设置数据适配器
    tableView.setDataAdapter(new SimpleTableDataAdapter(this, tableData));

    // 4. 可选:设置列宽(根据需求调整,单位是dp)
    int[] columnWidths = {60, 100, 180, 120, 80, 120, 100, 80, 120};
    tableView.setColumnWidths(columnWidths);

    // 可选:设置表格样式,比如表头背景色
    tableView.setHeaderBackgroundColor(Color.parseColor("#2196F3"));
    tableView.setHeaderTextColor(Color.WHITE);
}

5. 启动请求

在Activity的onCreate方法里调用fetchUserData()就行:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    fetchUserData();
}

一些注意事项

  • 如果你不想展示密码,可以去掉对应的列,调整columnHeaders和tableData的长度即可
  • 要是需要更复杂的单元格样式(比如不同状态的文字颜色),可以自定义TableDataAdapter替代SimpleTableDataAdapter
  • 记得处理空数据的情况,如果userList为空,可以给TableView设置一个空视图提示
  • 后端接口要确保返回的JSON格式正确,字段名要和解析逻辑完全匹配
  • Android 9及以上使用HTTP接口时,需要在AndroidManifest.xml的<application>标签里加android:usesCleartextTraffic="true",或者改用HTTPS

内容的提问来源于stack exchange,提问作者Rahul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:56:25