我最近更新了我的一个应用程序,在极少数情况下我得到了上述错误.仅当用户尝试通过现有应用程序更新应用程序时,才会出现此错误.这不会发生在每次和每台设备上.我在Android SQLiteException上发现了类似的问题:无法将db的语言环境更改为'en_US'但是回复并没有解决我的问题.我一直试图通过一个小小的方式来解决这个问题而且我失败了.我使用过SQLiteDatabase,因此我没有给出任何数据库路径.崩溃报告如下
android.database.sqlite.SQLiteException: Failed to change locale for db '/data/data/com.scoreup/databases/scoreUp' to 'en_US'.
0
android.database.sqlite.SQLiteConnection.setLocaleFromConfiguration
SQLiteConnection.java:393
1
android.database.sqlite.SQLiteConnection.open
SQLiteConnection.java:218
2
android.database.sqlite.SQLiteConnection.open
SQLiteConnection.java:193
3
android.database.sqlite.SQLiteConnectionPool.openConnectionLocked
SQLiteConnectionPool.java:463
4
android.database.sqlite.SQLiteConnectionPool.open
SQLiteConnectionPool.java:185
5
android.database.sqlite.SQLiteConnectionPool.open
SQLiteConnectionPool.java:177
6
android.database.sqlite.SQLiteDatabase.openInner
SQLiteDatabase.java:806
7
android.database.sqlite.SQLiteDatabase.open
SQLiteDatabase.java:791
8
android.database.sqlite.SQLiteDatabase.openDatabase
SQLiteDatabase.java:694
9
android.app.ContextImpl.openOrCreateDatabase
ContextImpl.java:1148
10
android.content.ContextWrapper.openOrCreateDatabase
ContextWrapper.java:268
11
android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked
SQLiteOpenHelper.java:223
12
android.database.sqlite.SQLiteOpenHelper.getWritableDatabase
SQLiteOpenHelper.java:163
13
com.scoreup.gson.DatabaseHandler.openDatabase
DatabaseHandler.java:35
14
com.scoreup.gson.DatabaseHandler.getQuizBots
DatabaseHandler.java:379
15
com.scoreup.activity.earn.fragments.EarnScreenBottomFragmentWinners.onCreateView
EarnScreenBottomFragmentWinners.java:66
16
android.app.Fragment.performCreateView
Fragment.java:2053
17
android.app.FragmentManagerImpl.moveToState
FragmentManager.java:894
18
android.app.FragmentManagerImpl.moveToState
FragmentManager.java:1067
19
android.app.BackStackRecord.run
BackStackRecord.java:834
20
android.app.FragmentManagerImpl.execPendingActions
FragmentManager.java:1452
21 …Run Code Online (Sandbox Code Playgroud) 在阅读文档之前,如果插入不成功,我希望SQLiteDatabase的insertOrThrow()方法抛出异常.
但是,文档说的insertOrThrow()方法
返回新插入行的行ID,如果发生错误则返回-1
那么,如果它-1在发生错误时返回,在什么情况下会抛出异常?
IllegalArgumentException:未知的URL内容://
^有上面的噩梦.我检查了我的变量和路径,但看不出是什么问题?非常感谢任何指针!
这是我的踪迹.
java.lang.IllegalArgumentException: Unknown URL
content://com.purewowstudio.topmovies.data.FilmProvider/film_data
at android.content.ContentResolver.insert(ContentResolver.java:1203)
at com.purewowstudio.topmovies.data.DatabaseHelper.addFilm(DatabaseHelper.java:52)
at com.purewowstudio.topmovies.fragments.FilmList$getFilms.onPostExecute(FilmList.java:72)
at com.purewowstudio.topmovies.fragments.FilmList$getFilms.onPostExecute(FilmList.java:62)
at android.os.AsyncTask.finish(AsyncTask.java:632)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5262)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:898)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:693)
Run Code Online (Sandbox Code Playgroud)
内容提供商
public class FilmProvider extends ContentProvider {
public static final String TABLE_NAME = "film_data";
public static final String AUTHORITY = "com.purewowstudio.topmovies.data.FilmProvider";
public static final Uri CONTENT_URI = Uri.parse("content://" + AUTHORITY + "/" + TABLE_NAME);
public static final int FILMS = 1;
public static final …Run Code Online (Sandbox Code Playgroud) java android android-contentprovider android-activity android-database
我有一个 VideoList 对象,我想使用房间库保存它,但是当我尝试将 @Embedded 与 public List list = null; 一起使用时 它给我以下错误: 错误:(23, 24) 错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。
VideoList类如下。
@Entity
public class VideoList {
@PrimaryKey
public String id;
public String title;
public String viewType;
public Integer sortingOrder = null;
public String componentSlug;
public String endPoint = null;
@Embedded
public List<Video> list = null;
public boolean hidden = false; }
Any suggestions?
Run Code Online (Sandbox Code Playgroud) 我设置了一个闹钟,每小时调用一个广播接收器。此接收器尝试从 sqlite 数据库加载数据。
问题是,提醒列表为空。相同的代码适用于活动,但不适用于接收器。有什么我必须改变才能访问接收器中的数据库的吗?这是活动和接收器中不同上下文的问题吗?
“setAlarm”方法是我用来创建活动警报的方法。
问候
public class AppReceiver extends BroadcastReceiver {
private static final String TAG = "AppReceiver";
@Override
public void onReceive(Context context, Intent intent) {
ReminderRepository mRepository; = new ReminderRepository(context);
List<Reminder> list = mRepository.getAllReminder();
for(Reminder r : list) {
// TODO
}
}
}
public class ReminderRepository {
private ReminderDao mReminderDao;
private List<Reminder> mAllReminder;
public DisposalCalenderRepository(Context context) {
ReminderRoomDatabase db = ReminderRoomDatabase.getDatabase(context);
mReminderDao = db.reminderDao();
mAllReminder = mReminderDao.getAll();
}
public List<Reminder> getAllReminder(){
return mAllReminder;
}
}
@Dao
public …Run Code Online (Sandbox Code Playgroud) android broadcastreceiver android-database android-broadcastreceiver android-room
假设您有一个 Room 数据库,其中包含两个使用外键关联的表(实体)。(这只是一个简化的例子,所以不需要提出新的数据结构:))
@Entity(tableName = "Streets", primaryKeys = {"Country", "City"})
public class Street {
...
}
@Entity(tableName = "Users",
primaryKeys = {"Country", "City", "Name"},
foreignKeys = @ForeignKey(entity = Street.class,
parentColumns = {"Country", "City"},
childColumns = {"Country", "City"},
onDelete = CASCADE))
public class User {
...
}
Run Code Online (Sandbox Code Playgroud)
如何在一次查询中从数据库中检索所有信息?下面几乎按预期工作,但我还需要添加 City 列,但是如何做到这一点?如何添加多个 parentColumn 和 entityColumn?
@Query("SELECT * FROM Streets")
public abstract LiveData<List<PoJo>> getAllUsers();
public static class PoJo {
@Embedded
private Street street;
@Relation(parentColumn = "Country", entityColumn = "Country")
private List<User> mUsers;
}
Run Code Online (Sandbox Code Playgroud) 我有带有复合主键的表。我可以将其中一个文件设为自动生成吗?
Secenario :我有一个teacher table包含字段 techerId、姓名、性别、角色、部门、等级的字段,它具有由角色、部门和等级组成的复合主 ID。如何使teacherid自动生成?
我有 11Mb JSON 文件,这些文件将写入 Dao,但是当我保存所有数据时。我收到这个错误;
/data/user/0/com.test.save/databases/ChannelDb-wal 6946352 bytes: Bigger than 1048576; truncating
Run Code Online (Sandbox Code Playgroud)
我的代码;
AppDatabase dbRoom = Room.databaseBuilder(getApplicationContext(),
AppDatabase.class, Constants.CHANNEL_DB).build();
AndroidNetworking.get(user.getRemote())
.setTag(Constants.GET_CHANNEL_LIST)
.setPriority(Priority.HIGH)
.build()
.getAsOkHttpResponseAndParsed(new TypeToken<List<Channel>>() {
}, new OkHttpResponseAndParsedRequestListener<List<Channel>>() {
@Override
public void onResponse(Response okHttpResponse, List<Channel> channels) {
AsyncTask.execute(() -> dbRoom.channelDao().insertAll(channels));
}
@Override
public void onError(ANError anError) {
Log.d(TAG, "Check 4");
hideProgress();
Toast.makeText(getApplicationContext(), getResources()
.getString(R.string.an_error), Toast.LENGTH_LONG).show();
Crashlytics.log(Log.DEBUG, TAG, anError.getErrorDetail());
}
});
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Android 应用程序,使用 Room Database链接在本地保存数据。\n在简单的查询中,它工作正常。但是,当我循环遍历数据列表以在本地保存时,我得到 CursorWindowAllocationException。\n通过谷歌搜索,我应该像“cursor.close()”一样关闭光标,但是如何处理房间数据库中的光标?
\n\n谢谢你!
\n\n错误 :
\n\nCould not allocate CursorWindow \'/data/user/0/com.iSales/databases/isales_store\' of size 2097152 due to error -24.\nE/AndroidRuntime: FATAL EXCEPTION: AsyncTask #9\nProcess: com.iSales, PID: 10555\njava.lang.RuntimeException: An error occurred while executing doInBackground()\n at android.os.AsyncTask$3.done(AsyncTask.java:365)\n at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:383)\n at java.util.concurrent.FutureTask.setException(FutureTask.java:252)\n at java.util.concurrent.FutureTask.run(FutureTask.java:271)\n at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:257)\n at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)\n at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)\n at java.lang.Thread.run(Thread.java:784)\n Caused by: android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. \n at android.database.CursorWindow.<init>(CursorWindow.java:110)\n at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)\n at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:138)\n at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:132)\n at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:219)\n at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:258)\n at com.iSales.database.dao.ServerDao_Impl.getActiveServer(ServerDao_Impl.java:478)\n …Run Code Online (Sandbox Code Playgroud) 所以我有这个数据对象,它有一组字符串(代表不可索引的关键字,但在这里无关紧要)作为成员,当这个集合为空时,Room 表现不佳:
@Parcelize
@Entity(tableName = TABLE_NAME)
data class DataItem(
@PrimaryKey
@ColumnInfo(name = COLUMN_ID, index = true) val id: Long,
@ColumnInfo(name = COLUMN_GROUP, index = true) var group: Int,
@ColumnInfo(name = COLUMN_TEXT, index = true) var text: String,
@ColumnInfo(name = COLUMN_STRING_SET) var stringSet: Set<String>
): Parcelable {
companion object
{
const val TABLE_NAME = "TestDataItems"
const val COLUMN_ID = "id"
const val COLUMN_GROUP = "groupColumn"
const val COLUMN_TEXT = "text"
const val COLUMN_STRING_SET = "stringSet"
}
}
Run Code Online (Sandbox Code Playgroud)
首先,我收到一个错误,因为 room 不知道如何处理这些数据。公平地说,让我们实现一个类型转换器。在没有 JSON …