📅  最后修改于: 2023-12-03 15:23:25.047000             🧑  作者: Mango
在Android应用程序中使用ListView
来显示数据是非常常见的。另一方面,使用SQLite数据库来存储和检索数据也是非常常见的。在这篇文章中,我们将介绍如何在ListView
中使用SQLite数据库来获取数据。
在开始之前,让我们确保您具备以下先决条件:
ListView
。要在ListView
中读取SQLite数据库中的数据,我们需要创建一个数据适配器。数据适配器是将数据从数据库读取,并将其传递到ListView
以供显示的桥梁。
以下是一个示例DatabaseHelper
类,它将从SQLite数据库中检索数据:
public class DatabaseHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 1;
private static final String DATABASE_NAME = "MyDatabase.db";
private static final String TABLE_NAME = "MyTable";
private static final String COLUMN_ID = "id";
private static final String COLUMN_NAME = "name";
private static final String COLUMN_ADDRESS = "address";
public DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + "("
+ COLUMN_ID + " INTEGER PRIMARY KEY,"
+ COLUMN_NAME + " TEXT,"
+ COLUMN_ADDRESS + " TEXT" + ")";
db.execSQL(CREATE_TABLE);
String INSERT_DATA = "INSERT INTO " + TABLE_NAME + "(" + COLUMN_NAME + "," + COLUMN_ADDRESS + ") VALUES ('John', '123 Main St')";
db.execSQL(INSERT_DATA);
INSERT_DATA = "INSERT INTO " + TABLE_NAME + "(" + COLUMN_NAME + "," + COLUMN_ADDRESS + ") VALUES ('Jane', '456 Elm St')";
db.execSQL(INSERT_DATA);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);
}
public ArrayList<MyData> getData() {
ArrayList<MyData> dataList = new ArrayList<>();
String SELECT_ALL_DATA = "SELECT * FROM " + TABLE_NAME;
SQLiteDatabase db = getReadableDatabase();
Cursor cursor = db.rawQuery(SELECT_ALL_DATA, null);
if (cursor.moveToFirst()) {
do {
MyData myData = new MyData();
myData.setId(cursor.getInt(cursor.getColumnIndex(COLUMN_ID)));
myData.setName(cursor.getString(cursor.getColumnIndex(COLUMN_NAME)));
myData.setAddress(cursor.getString(cursor.getColumnIndex(COLUMN_ADDRESS)));
dataList.add(myData);
} while (cursor.moveToNext());
}
cursor.close();
db.close();
return dataList;
}
}
该类具有一个getData()
方法,该方法检索SQLite数据库中的所有数据并返回一个ArrayList
对象。请注意,getData()
方法返回的是自定义MyData
对象列表。您可以根据需要定义自己的数据类。
一旦我们有了数据,我们需要创建一个适配器以传递这些数据给ListView
。以下是一个示例适配器类:
public class MyAdapter extends BaseAdapter {
private ArrayList<MyData> mDataList = new ArrayList<>();
private Context mContext;
public MyAdapter(Context context, ArrayList<MyData> dataList) {
mContext = context;
mDataList = dataList;
}
@Override
public int getCount() {
return mDataList.size();
}
@Override
public Object getItem(int position) {
return mDataList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.list_item, parent, false);
}
TextView nameTextView = convertView.findViewById(R.id.nameTextView);
TextView addressTextView = convertView.findViewById(R.id.addressTextView);
MyData data = mDataList.get(position);
nameTextView.setText(data.getName());
addressTextView.setText(data.getAddress());
return convertView;
}
}
上述适配器使用我们之前创建的MyData
类,该类存储了SQLite数据库中的数据。在适配器中,我们使用getView()
方法来呈现每个列表项。我们使用LayoutInflater
从布局文件中创建一个新的View
对象,并将数据填充到该视图中。getItem()
方法返回与position
相对应的MyData
对象。
现在我们已准备好从SQLite数据库中检索数据并创建适配器。现在,我们来看一下如何在ListView
中使用它们。
在您的Activity
类中,您需要使用getData()
方法来获取数据。然后,将该数据传递给MyAdapter
类以创建适配器。最后,将适配器设置为ListView
的适配器。
public class MainActivity extends AppCompatActivity {
private ListView mListView;
private DatabaseHelper mDatabaseHelper;
private MyAdapter mAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mListView = findViewById(R.id.listView);
mDatabaseHelper = new DatabaseHelper(this);
ArrayList<MyData> dataList = mDatabaseHelper.getData();
mAdapter = new MyAdapter(this, dataList);
mListView.setAdapter(mAdapter);
}
}
在本文中,我们介绍了如何从SQLite数据库中检索数据并将其显示在ListView
中。我们使用了自定义适配器来传递数据,并使用自定义数据类来表示每个数据库条目。虽然上述代码仅提供了一个基本框架,但这是一个很好的起点,您可以在此基础上构建更复杂的应用程序。