在视图持有者中从SQLite中获取值的步骤如下:
import android.arch.lifecycle.ViewModel;
import android.arch.lifecycle.LiveData;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class MyDatabaseHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "my_database";
private static final int DATABASE_VERSION = 1;
public MyDatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
// 在此处创建数据库表格
db.execSQL("CREATE TABLE IF NOT EXISTS my_table (id INTEGER PRIMARY KEY AUTOINCREMENT, value TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// 在此处更新数据库表格
db.execSQL("DROP TABLE IF EXISTS my_table");
onCreate(db);
}
}
public class MyViewModel extends ViewModel {
private LiveData<String> value;
public LiveData<String> getValue(Context context) {
if (value == null) {
value = new MutableLiveData<>();
loadValue(context);
}
return value;
}
private void loadValue(Context context) {
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query("my_table", new String[]{"value"}, null, null, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
String retrievedValue = cursor.getString(cursor.getColumnIndex("value"));
value.setValue(retrievedValue);
cursor.close();
}
db.close();
}
}
public class MyActivity extends AppCompatActivity {
private MyViewModel viewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = ViewModelProviders.of(this).get(MyViewModel.class);
viewModel.getValue(this).observe(this, new Observer<String>() {
@Override
public void onChanged(String value) {
// 在此处处理从SQLite中获取的值
}
});
}
}
这样,你就可以通过视图持有者从SQLite数据库中获取值了。上述代码中,我们使用了Android架构组件中的ViewModel和LiveData来管理数据的生命周期和观察者模式,确保数据在配置变更(如屏幕旋转)时不会丢失。