如何在Android中创建数据库并成功展示数据?

在 Android 中创建数据库并显示数据,可以使用 SQLiteOpenHelper 和 CursorAdapter。

一、

如何在Android中创建数据库并成功展示数据?

在Android开发中,SQLite是一个轻量级的关系型数据库管理系统,常用于移动设备上存储结构化数据,本文将详细讲解如何在Android应用中创建数据库,并进行数据的插入与查询操作,最后通过ListView或RecyclerView展示数据。

二、准备工作

环境搭建:确保已安装Android Studio,并创建一个新的Android项目。

添加依赖:对于使用Room持久库(推荐方式)的项目,需在build.gradle文件中添加相应依赖。

implementation "androidx.room:room-runtime:2.3.0"
annotationProcessor "androidx.room:room-compiler:2.3.0"

三、创建数据库

1. 定义实体类

定义一个实体类来映射数据库表结构,创建一个User类表示用户信息。

import androidx.room.Entity;
import androidx.room.PrimaryKey;
@Entity(tableName = "users")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    public String name;
    public String email;
}

2. 创建DAO接口

数据访问对象(DAO)提供了访问数据库的方法,为User实体创建一个DAO接口。

如何在Android中创建数据库并成功展示数据?

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import java.util.List;
@Dao
public interface UserDao {
    @Insert
    void insert(User user);
    @Query("SELECT * FROM users")
    List<User> getAllUsers();
}

3. 创建数据库

使用Room库的Room.databaseBuilder方法创建数据库实例。

import android.content.Context;
import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
    private static volatile AppDatabase INSTANCE;
    static AppDatabase getDatabase(final Context context) {
        if (INSTANCE == null) {
            synchronized (AppDatabase.class) {
                if (INSTANCE == null) {
                    INSTANCE = Room.databaseBuilder(context.getApplicationContext(),
                            AppDatabase.class, "user_database")
                            .build();
                }
            }
        }
        return INSTANCE;
    }
}

四、插入和查询数据

1. 插入数据

在活动或片段中,获取UserDao实例并插入数据。

new Thread(new Runnable() {
    @Override
    public void run() {
        User user = new User();
        user.name = "John Doe";
        user.email = "john.doe@example.com";
        AppDatabase.getDatabase(MainActivity.this).userDao().insert(user);
    }
}).start();

2. 查询数据并更新UI

同样在后台线程中查询数据,然后通过HandlerLiveData(更推荐)更新UI。

new Thread(new Runnable() {
    @Override
    public void run() {
        final List<User> users = AppDatabase.getDatabase(MainActivity.this).userDao().getAllUsers();
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                // 更新UI,如设置给Adapter
            }
        });
    }
}).start();

五、显示数据

使用ListView显示数据

如何在Android中创建数据库并成功展示数据?

定义布局文件activity_main.xml,包含一个ListView:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
    <ListView
        android:id="@+id/listView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>
</LinearLayout>

创建一个ArrayAdapter来绑定数据到ListView:

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, userEmails);
listView.setAdapter(adapter);

使用RecyclerView显示数据(推荐方式)

定义布局文件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/textViewName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
    <TextView
        android:id="@+id/textViewEmail"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

创建UserAdapter类继承RecyclerView.Adapter

public class UserAdapter extends RecyclerView.Adapter<UserAdapter.UserViewHolder> {
    private List<User> users;
    public UserAdapter(List<User> users) {
        this.users = users;
    }
    @NonNull
    @Override
    public UserViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_user, parent, false);
        return new UserViewHolder(view);
    }
    @Override
    public void onBindViewHolder(@NonNull UserViewHolder holder, int position) {
        User user = users.get(position);
        holder.nameTextView.setText(user.name);
        holder.emailTextView.setText(user.email);
    }
    @Override
    public int getItemCount() {
        return users.size();
    }
    static class UserViewHolder extends RecyclerView.ViewHolder {
        TextView nameTextView;
        TextView emailTextView;
        public UserViewHolder(@NonNull View itemView) {
            super(itemView);
            nameTextView = itemView.findViewById(R.id.textViewName);
            emailTextView = itemView.findViewById(R.id.textViewEmail);
        }
    }
}

在活动中设置RecyclerView和适配器:

RecyclerView recyclerView = findViewById(R.id.recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
UserAdapter adapter = new UserAdapter(users); // 假设users是查询得到的数据列表
recyclerView.setAdapter(adapter);

六、归纳

通过上述步骤,我们成功在Android应用中创建了一个SQLite数据库,实现了数据的插入、查询,并通过ListView和RecyclerView展示了数据,虽然直接使用SQLite和Cursor进行数据操作也是可行的,但Room持久库以其更简洁、更易维护的特点成为现代Android开发的首选。

原创文章,作者:未希,如若转载,请注明出处:https://www.kdun.com/ask/1267861.html

本网站发布或转载的文章及图片均来自网络,其原创性以及文中表达的观点和判断不代表本网站。如有问题,请联系客服处理。

(0)
未希新媒体运营
上一篇 2024-11-06 16:13
下一篇 2024-07-17 03:19

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

产品购买 QQ咨询 微信咨询 SEO优化
分享本页
返回顶部
云产品限时秒杀。精选云产品高防服务器,20M大带宽限量抢购 >>点击进入