大家好,我对在 android 中开发非常陌生,我想向我的应用程序添加一个数据库。
问题是我不知道如何只初始化整个表一次。
我做了很多阅读,我发现你可以通过覆盖onCreate(SQLiteDatabase db)helper 类中的方法来做到这一点。
这些是我的数据字段和我的onCreate(SQLiteDatabase db)方法。
public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_EIGHTU = "8u";
public static final String KEY_NINEU = "9u";
public static final String KEY_TENU = "10u";
public static final String KEY_ELEVENU = "11u";
private static final String TAG = "DBAdapter";
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何......有什么想法吗?
主要问题是我有多个要初始化的行。
我尝试使用db表的数据填充建议列表.但是我得到了StaleDataException.它会随机抛出,但总是在我将一个角色输入textview时.
这是我的代码:
CursorLoader扩展了Cristian的SimpleCursorLoader类
public class TagCursorLoader extends SimpleCursorLoader {
private String mSelection;
private TagDbLoader mDbLoader;
public TagCursorLoader(Context context, TagDbLoader dBLoader, String selection) {
super(context);
this.mDbLoader = dBLoader;
this.mSelection = selection;
}
@Override
public Cursor loadInBackground() {
return mDbLoader.fetchContainingString(mSelection);
}
}
Run Code Online (Sandbox Code Playgroud)
Loader回调:
public class TagCursorLoaderCallback implements LoaderCallbacks<Cursor>, CursorToStringConverter {
private Context mContext;
private TagDbLoader mdDbLoader;
private SimpleCursorAdapter mAdapter;
private String mSelection;
public TagCursorLoaderCallback(Context context, TagDbLoader dBLoader, SimpleCursorAdapter adapter) {
this.mContext = context;
this.mdDbLoader = dBLoader; …Run Code Online (Sandbox Code Playgroud) android simplecursoradapter android-cursor android-sqlite android-cursoradapter
我正在尝试删除我存储在Sqlite数据库中的类型的记录.它失败了以下消息:
"Cannot store type: MyNamespace.PanelLog"
Run Code Online (Sandbox Code Playgroud)
我有以下方法来删除记录:
public static int DeletePanelLog(int id)
{
return me.db.DeleteItem<PanelLog>(id);
}
Run Code Online (Sandbox Code Playgroud)
其中DeleteItem定义为:
public int DeleteItem<T>(int id) where T : IBusinessEntity, new()
{
lock (locker) {
#if NETFX_CORE
return Delete(new T() { ID = id });
#else
return Delete<T> (new T () { ID = id });
#endif
}
}
Run Code Online (Sandbox Code Playgroud)
PanelLog定义为:
public class PanelLog : IBusinessEntity
{
public PanelLog(){}
[PrimaryKey, AutoIncrement]
public int ID { get; set; }
public uint Sequence { get; set; }
public DateTime …Run Code Online (Sandbox Code Playgroud) 我想从我创建的数据库中获取一个随机行,但我无法弄清楚如何做到这一点.
我在StackOverflow上找到了几个问题和答案,我说应该使用它:
Cursor cursor = this.db.query("mainTable Order BY RANDOM() LIMIT 1",
new String[] { "*" }, null, null, null, null, null);
Run Code Online (Sandbox Code Playgroud)
但是,我认为我有某种其他数据库,因为它返回错误,不知道方法'查询'.
这是我使用的数据库代码:
package com.example.database;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class DBAdapter{
private static final String TAG = "DBAdapter";
public static final String KEY_ROWID = "_id";
public static final int COL_ROWID = 0;
public static final String KEY_PIC = "picture";
public static final String KEY_ANS = "answer";
public static final int COL_PIC …Run Code Online (Sandbox Code Playgroud) 在大多数Android示例代码中,从SQLite数据库填充ListView有两种方式,
预取数据,以列表-执行查询,对于每一行创建模型对象,然后将其添加到列表和关闭的光标,然后填充ListView控件与列表.
没有List和Model对象 -执行查询并按照Cursor使用moveToFirst,moveToLast,move,根据需要填充ListView.
现在我想知道,在Android中,上述哪种方法的内存效率更高?
android android-listview android-cursor android-sqlite android-memory
我对 android 有点陌生,我正在研究一个曾经有 40 MB 的 sqlite 数据库的项目。现在我想把 sqlite 的 blob 数据放在 raw 文件夹中,所以我的数据库现在小于 1 MB。问题是在数据库路径(data/data/package name/databases)中,db文件大小还是和以前一样(我的手机root了,每次调试后都可以查看)。在数据库浏览器中,我们可以使用紧凑型数据库来减少删除一些表后的数据库大小。现在我该怎么办?任何帮助,将不胜感激。提前 tnx。
我正在使用 firebase FCM 来获取通知。我想要如果收到通知,它应该存储在我的 RoomDatabase 中。稍后,当用户打开应用程序时,将在通知部分显示所有通知。
我正在使用 MVVM,我试图通过ViewModel进行保存,但它不起作用。这是我目前的代码。
public class MessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.d("MessagingService", s);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
// Check if message contains a notification payload.
if (remoteMessage.getData().isEmpty()){
showNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody());
} else {
showNotification(remoteMessage.getData());
}
}
private void showNotification(Map<String, String> data) {
Bitmap bitmap;
String title = data.get("title").toString();
String body = data.get("body").toString();
String imageUri = data.get("image").toString();
String TrueOrFalse = data.get("AnotherActivity").toString();
bitmap = getBitmapfromUrl(imageUri); …Run Code Online (Sandbox Code Playgroud) android android-sqlite firebase-cloud-messaging android-mvvm android-room
我只是想知道如果您仅更改数据访问对象(DAO) ,是否真的需要增加房间数据库版本号。
所以场景是:
我需要增加房间数据库版本号吗?
我的问题:我不确定为什么这个 Android Room 查询没有返回结果。我以为我理解了正确的编码,而且看起来很简单。如果我使用 SQLiteStudio 将相同的查询直接传递到同一个数据库,我会得到结果。
调用代码(我硬编码字符串“truth”来测试它):
List<Integer> tableIDs = researchDatabase.getCommentsDao().customSearchCommentsTable("truth");
Run Code Online (Sandbox Code Playgroud)
DAO 代码(包含在 CommentsDao 中):
@Query("SELECT CommentID FROM Comments WHERE Comment LIKE :value")
List<Integer> customSearchCommentsTable(String value);
Run Code Online (Sandbox Code Playgroud)
我所做的:我是 Android Room 的新手,但我一直在使用 Android 开发人员 (developer.android.com) 的所有示例和课程,并在 stackoverflow 上审查和应用了许多与之密切相关的帖子,但我无法得到任何结果返回。当我单步执行代码时,实际的 Android Room 代码似乎没有将变量字符串绑定到语句,尽管我可以看到参数字符串被正确识别和传递,这不是我编写的代码,或者至少不是我从来没有看到带有变量数据的结果绑定字符串,我只看到了这个:
从评论中选择评论ID 在哪里评论喜欢?
我的目标是:这实际上是创建查询来处理与此类似的多个 LIKE 查询的第一步,我认为这需要 @RawQuery 设置。现在,我无法让简单的事情发挥作用。
@Query 包装器中发生了什么:我意识到我在这里可能很天真且错误,但在下面我可以看到参数和语句都被传递,但它看起来并不像“_statement.bindString”实际上绑定了“: value”('truth')到语句中并返回 0 个结果。
我一直点击这个烦人的消息!
当数据完成插入本地数据库时,我看到了这条消息
JNI critical lock held for 30.083ms on Thread[27,tid=23883,Runnable,Thread*=0xce150a00,peer=0x12cc0190,"Sqflite"]
Run Code Online (Sandbox Code Playgroud)
如果我从表中选择数据,我会得到
W/CursorWindow(23809): Window is full: requested allocation 3095146 bytes, free space 2096696 bytes, window size 2097152 bytes
E/SQLiteQuery(23809): exception: Row too big to fit into CursorWindow requiredPos=0, totalRows=1; query: SELECT * FROM description_table;
I/flutter (23809): DatabaseException(Row too big to fit into CursorWindow requiredPos=0, totalRows=1) sql 'SELECT * FROM defect_description_table;' args []}
Run Code Online (Sandbox Code Playgroud)
我没有任何 blob 数据,都是字符串。那么为什么会发生这种情况呢?
这里是json结构
[{ "id": 1, "name": "Descriptions","data": [{..},{...} ... ]},{....},{....}]
Run Code Online (Sandbox Code Playgroud)
我认为问题出在数据列表上,因为它包含大量数据(有10298)?
解决这个问题的办法是什么?
我的插入方法
Future insertData(
BuildContext context, …Run Code Online (Sandbox Code Playgroud) android-sqlite ×10
android ×7
android-room ×3
sqlite ×3
database ×2
java ×2
android-mvvm ×1
dart ×1
flutter ×1
flutter-moor ×1
xamarin ×1