使用 SQLiteOpenHelper
创建或管理数据库,定义表结构。
public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "app.db"; private static final int DATABASE_VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 创建表 String createTable = "CREATE TABLE users (" + "id INTEGER PRIMARY KEY AUTOINCREMENT," + "name TEXT," + "age INTEGER)"; db.execSQL(createTable); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 更新表逻辑 db.execSQL("DROP TABLE IF EXISTS users"); onCreate(db); } }
从数据库中读取数据,封装为 List
或 Cursor
。
public List<User> getAllUsers(DatabaseHelper dbHelper) { List<User> userList = new ArrayList<>(); SQLiteDatabase db = dbHelper.getReadableDatabase(); Cursor cursor = db.query("users", null, null, null, null, null, null); while (cursor.moveToNext()) { User user = new User(); user.setId(cursor.getInt(cursor.getColumnIndex("id"))); user.setName(cursor.getString(cursor.getColumnIndex("name"))); user.setAge(cursor.getInt(cursor.getColumnIndex("age"))); userList.add(user); } cursor.close(); return userList; }
使用 RecyclerView
和自定义适配器展示数据。
适配器定义:
public class UserAdapter extends RecyclerView.Adapter<UserAdapter.ViewHolder> { private List<User> userList; public UserAdapter(List<User> userList) { this.userList = userList; } @NonNull @Override public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false); return new ViewHolder(view); } @Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { User user = userList.get(position); holder.name.setText(user.getName()); holder.age.setText(String.valueOf(user.getAge())); } @Override public int getItemCount() { return userList.size(); } static class ViewHolder extends RecyclerView.ViewHolder { TextView name, age; public ViewHolder(@NonNull View itemView) { super(itemView); name = itemView.findViewById(R.id.tv_name); age = itemView.findViewById(R.id.tv_age); } } }
布局文件(item_user.xml
):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" android:padding="16dp"> <TextView android:id="@+id/tv_name" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="16sp" /> <TextView android:id="@+id/tv_age" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="14sp" /> </LinearLayout>
在 Activity
中初始化数据库、查询数据并设置适配器。
public class MainActivity extends AppCompatActivity { private RecyclerView recyclerView; private UserAdapter adapter; private DatabaseHelper dbHelper; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); recyclerView = findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new LinearLayoutManager(this)); dbHelper = new DatabaseHelper(this); List<User> users = getAllUsers(dbHelper); adapter = new UserAdapter(users); recyclerView.setAdapter(adapter); } }
解答:
在数据库操作(如增删改)后,重新查询数据并调用 adapter.notifyDataSetChanged()
。
// 插入新用户后刷新列表 SQLiteDatabase db = dbHelper.getWritableDatabase(); db.execSQL("INSERT INTO users (name, age) VALUES ('张三', 25)"); List<User> updatedUsers = getAllUsers(dbHelper); adapter.updateData(updatedUsers); // 需在适配器中添加 updateData 方法
解答:
LIMIT
+ 分页偏移量)。 AsyncTask
或 Coroutine
)。 ViewHolder
,减少 findViewById