我是开发新手,通过将图像转换为字节数组并将其存储到 BLOB 中的 SQLite 数据库(在下面的代码中找到),我成功地将图像存储到数据库中。但是我不知道如何将音频/视频存储到数据库中,任何人都可以帮助我 PLZ ...
public void getImage(View view){
Intent intent = new Intent();
intent.setAction(Intent.ACTION_GET_CONTENT);
intent.setType("image/* video/*");
startActivityForResult(Intent.createChooser(intent, "select picture"), 1);
}
public void onActivityResult(int requestCode, int resultCode, Intent data){
if(resultCode == RESULT_OK){
Uri imageUri = data.getData();
String imagePath = getPath(imageUri);
image1.setVisibility(View.VISIBLE);
image1.setImageURI(imageUri);
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
Toast.makeText(getApplicationContext(), ""+bitmap, Toast.LENGTH_SHORT).show();
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStream);
img = byteArrayOutputStream.toByteArray();
}
}
public String getPath(Uri uri) {
String[] projection = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(uri, …Run Code Online (Sandbox Code Playgroud) sqlite android sqliteopenhelper android-sqlite android-database
我正在尝试从listview中获取数据库中的数据,如下所示.
long count = UserTableSugar.count(UserTableSugar.class);
if(count>0)
{
UserTableSugar.listAll(UserTableSugar.class);
List<UserTableSugar> userTable = UserTableSugar.listAll(UserTableSugar.class);
CustomAdapterListview madapter = new CustomAdapterListview(getApplicationContext(),userTable);
listView.setAdapter(madapter);
}
Run Code Online (Sandbox Code Playgroud)
但是,数据不会显示出来.在调试时,count的值为2(表中有两个记录).但列表userTable的大小显示为0.
求助:添加模型类的空构造函数就可以了.
我开始使用 Room 数据库并浏览了几个文档来创建房间实体。这些是我的关系。一个聊天频道可以有很多对话。所以这是一对多的关系。因此我创建了如下实体。
渠道实体
@Entity(primaryKeys = ["channelId"])
@TypeConverters(TypeConverters::class)
data class Channel(
@field:SerializedName("channelId")
val channelId: String,
@field:SerializedName("channelName")
val channelName: String,
@field:SerializedName("createdBy")
val creationTs: String,
@field:SerializedName("creationTs")
val createdBy: String,
@field:SerializedName("members")
val members: List<String>,
@field:SerializedName("favMembers")
val favMembers: List<String>
) {
// Does not show up in the response but set in post processing.
var isOneToOneChat: Boolean = false
var isChatBot: Boolean = false
}
Run Code Online (Sandbox Code Playgroud)
对话实体
@Entity(primaryKeys = ["msgId"],
foreignKeys = [
ForeignKey(entity = Channel::class,
parentColumns = arrayOf("channelId"),
childColumns = arrayOf("msgId"),
onUpdate = CASCADE, …Run Code Online (Sandbox Code Playgroud) 目录
@Entity(tableName = "directory")
class Directory(@PrimaryKey(autoGenerate = false) var id: Int? = null,
@ColumnInfo(name = DIR_NAME) var dirName: String? = null,
@Ignore var dirImages: List<Images>? = null
) : Serializable {
companion object {
const val DIR_NAME = "dirName"
const val DIR_IMAGES = "dirImages"
}
}
Run Code Online (Sandbox Code Playgroud)
影像模型
@Entity(foreignKeys = arrayOf(ForeignKey(entity = Directory::class,
parentColumns = arrayOf("id"),
childColumns = arrayOf("id"),
onDelete = ForeignKey.CASCADE)))
data class Images(
@PrimaryKey(autoGenerate = false) val id: Int? = null,
@ColumnInfo(name = "image") val images: String
) { …Run Code Online (Sandbox Code Playgroud) android kotlin android-database android-components android-room
我想访问我的小部件类中的 Room DB 以根据存储的数据更新小部件。
这里的问题是 ViewModelProvider 需要一个片段或活动来处理..
ViewModelProviders.of(fragment).get(YourViewModel.class);
这在应用程序小部件类中不可用,所以怎么做?
android android-widget android-database android-room android-architecture-components
有没有一种方法可以让一个 Room TypeConverter 接受多个表字段并将它们组合成某个对象?
作为示例,假设我有一个表 Foo,其中包含列INT numerator、INT denominator(共同表示分数)和INT unit(单位映射到测量单位的枚举)。我想将它们组合成MyScalar(Fraction(numerator, denominator), unit). 例如,可能取一行(1, 5, 2)(映射2到 的位置MeasurementUnit.KG)并使用 a@TypeConverter将此行转换为MyScalar(Fraction(1,5), MeasurementUnit.KG)。
现在我只是在做
data class MyEntity(
val numerator: Int,
val denominator: Int,
@TypeConverters(IntAndUnitConverter::class)
val unit: MeasurementUnit
) {
fun combine(): MyScalar {
return MyScalar(Fraction(numerator, denominator), unit)
}
}
Run Code Online (Sandbox Code Playgroud)
和
data class MyScalar(val value: Fraction, val unit: MeasurementUnit)
Run Code Online (Sandbox Code Playgroud)
似乎可以解决这个问题,但我发现这个想法很有吸引力,只需让我的 @Entity 将 @TypeConverters(SomeThreeColumnConverter::class) 放在顶部,而不用担心记住调用 merge() 或类似的东西。
我认为不可能,但想检查一下。
companion object {
@Volatile
private lateinit var instance: ExampleDatabase
fun getInstance(context: Context): ExampleDatabase {
synchronized(this) {
if(!::instance.isInitialized) {
instance = Room.databaseBuilder(
context.applicationContext, // Why does this require context?
LottoDatabase::class.java,
"lotto_database"
)
.fallbackToDestructiveMigration()
.build()
}
return instance
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是创建房间数据库单例的一般方式。我想知道为什么 Room.databaseBuilder 函数需要上下文作为参数。我知道这个问题可能很愚蠢,因为我对 Android 中的上下文缺乏了解。
android android-context kotlin android-database android-room
我想删除由我的应用程序创建的完整数据库.
你知道任何adb命令或android语句吗?
在阅读文档之前,如果插入不成功,我希望SQLiteDatabase的insertOrThrow()方法抛出异常.
但是,文档说的insertOrThrow()方法
返回新插入行的行ID,如果发生错误则返回-1
那么,如果它-1在发生错误时返回,在什么情况下会抛出异常?
目前,我们有以下 Dao 和模型类。
@Query("SELECT * FROM note")
public abstract LiveData<List<Note>> getAllNotes();
Run Code Online (Sandbox Code Playgroud)
@Entity(
tableName = "note"
)
public class Note {
@ColumnInfo(name = "title")
private String title;
// Can contain a huge String.
@ColumnInfo(name = "body")
private String body;
}
Run Code Online (Sandbox Code Playgroud)
但是,在某些情况下,我们只对加载感兴趣title。
一次加载所有Note带有大body字符串的s ,可能会导致OutOfMemoryException
有什么办法,我们可以创建另一个 POJO 如下?
public class SimpleNote {
private String title;
}
Run Code Online (Sandbox Code Playgroud)
然后,我们可以返回SimpleNotefrom 的列表NoteDao?
@Query("???")
public abstract LiveData<List<SimpleNote>> getAllSimpleNotes();
Run Code Online (Sandbox Code Playgroud) android ×10
android-database ×10
android-room ×6
sqlite ×3
kotlin ×2
adb ×1
android-architecture-components ×1
database ×1
one-to-many ×1
sugarorm ×1