我刚接触Android Studio,只用了两个月,用Java编程有一年了。
目前,我正在开发一个宠物收养应用程序,目标是让用户回答四个关于他们想要的宠物类型的问题,并根据复选框显示与用户想要的宠物相匹配的宠物列表。
我想我可以使用SQLite作为添加宠物的数据库,然后当用户选中复选框并提交时,应用程序可以检查数据库,并将宠物的姓名、年龄和性别发送到循环视图中。
我发现这并不像我想象的那么容易,我可以使用一些外部建议,因为我只有两个多星期的时间来做这件事。以下是我目前掌握的情况:
Main Activity
DataBaseHelper
import android.content.Context;
import com.readystatesoftware.sqliteasset.SQLiteAssetHelper;
public class DBHelper extends SQLiteAssetHelper {
public static final String DBNAME = "PetAdoption.db";
public static final int DBVERSION = 1;
public DBHelper(Context context) {
super(context,DBNAME,null,DBVERSION);
}
}
数据库访问
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DatabaseAccess {
private SQLiteOpenHelper openHelper;
private SQLiteDatabase database;
private static DatabaseAccess instance;
/**
* Private constructor to avoid object creation from outside classes.
*
* @param context
*/
private DatabaseAccess(Context context) {
this.openHelper = new DBHelper(context);
}
/**
* Return a singleton instance of DatabaseAccess.
*
* @param context the Context
* @return the instance of DatabaseAccess
*/
public static DatabaseAccess getInstance(Context context) {
if (instance == null) {
instance = new DatabaseAccess(context);
}
return instance;
}
/**
* Open the database connection.
*/
public void openDatabase() {
this.database = openHelper.getWritableDatabase();
}
public SQLiteDatabase getWritableDatabase() {
return openHelper.getWritableDatabase();
}
public SQLiteDatabase getReadableDataBase() {
return openHelper.getReadableDatabase();
}
/**
* Close the database connection.
*/
public void closeDatabase() {
if (database != null) {
this.database.close();
}
}
}
主要活动
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Context context;
private String query;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseAccess databaseAccess = DatabaseAccess.getInstance(context);
databaseAccess.openDatabase();
Cursor cursor = databaseAccess.getWritableDatabase().rawQuery(query, null);
}
}
我知道我仍然需要一个Recylerview的模型和特定的代码来提取与复选框匹配的宠物,但我不确定我的方向是否正确。任何建议都会很有帮助。
1条答案
按热度按时间2vuwiymt1#
任何建议都会很有帮助。
首先,演示创建数据库并加载一些数据(为了方便起见),而不是拥有资产(预打包的数据库)。
由于Schama不可用,这是编造的(这个答案是关于原理的,而不是与实际数据相反的,因为没有实际数据)。
表格名为宠物,它有5列:-
加载了一些数据(在onCreate方法中,注意而不是SQLiteAssetHelper使用了股票SQliteOpenHelper*,因为没有要加载的资产*)
所以纯粹为了方便起见,DBHelper是:
生成的宠物表将是:-
为了解如何灵活地选择数据MainActivity已更改为:-
getSelection方法是主要的加法,即允许根据5个值进行选择的代码,在本例中为:
该方法设计灵活,允许以无均为值的方式进行选择。没有人会选择每一行。
OnCreate方法中的代码只是调用getSelection方法来反映各种选择。
这4行中的第一行将不检索任何内容,因为没有任何行与所有给定条件匹配。第二行将选择type为Dog(3行)的行。第三行将选择类型为猫的行(其他3行)。第四个函数返回所有行(因为传递的是空值,这等同于没有选择条件)。
输出到日志的结果是:-