如何从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
相关产品推荐
相关产品推荐

