标签: android-database

无法将db'/data/data/com.scoreup/databases/scoreUp'的语言环境更改为'en_GB'

我最近更新了我的一个应用程序,在极少数情况下我得到了上述错误.仅当用户尝试通过现有应用程序更新应用程序时,才会出现此错误.这不会发生在每次和每台设备上.我在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)

android android-sqlite android-database

6
推荐指数
0
解决办法
704
查看次数

Android - insertOrThrow()什么时候抛出异常?

在阅读文档之前,如果插入不成功,我希望SQLiteDatabaseinsertOrThrow()方法抛出异常.

但是,文档说的insertOrThrow()方法

返回新插入行的行ID,如果发生错误则返回-1

那么,如果它-1在发生错误时返回,在什么情况下会抛出异常?

sqlite android android-database

6
推荐指数
1
解决办法
3233
查看次数

IllegalArgumentException:未知的URL内容:// CONTENT

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

5
推荐指数
1
解决办法
2万
查看次数

Room Persistence 库 - 带 List<Video> 的嵌套对象、@Embedded 不起作用。

我有一个 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)

java database sqlite android android-database

5
推荐指数
1
解决办法
6830
查看次数

带 Room 的 Android BroadcastReceiver 数据库访问

我设置了一个闹钟,每小时调用一个广播接收器。此接收器尝试从 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

5
推荐指数
1
解决办法
2831
查看次数

具有多个 parentColumn 和 entityColumn 的 Android Room Relations

假设您有一个 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)

android android-database android-room

5
推荐指数
1
解决办法
1698
查看次数

我可以在房间中将非主键字段作为自动生成的值吗

我有带有复合主键的表。我可以将其中一个文件设为自动生成吗?

Secenario :我有一个teacher table包含字段 techerId、姓名、性别、角色、部门、等级的字段,它具有由角色、部门和等级组成的复合主 ID。如何使teacherid自动生成?

sqlite android android-database android-room

5
推荐指数
1
解决办法
1923
查看次数

Android Room:大于 1048576 的 DAO

我有 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 android-sqlite android-database android-room

5
推荐指数
1
解决办法
857
查看次数

RoomDatabase - 由于错误 -24,无法分配大小为 2097152 的 CursorWindow

我正在开发一个 Android 应用程序,使用 Room Database链接在本地保存数据。\n在简单的查询中,它工作正常。但是,当我循环遍历数据列表以在本地保存时,我得到 CursorWindowAllocationException。\n通过谷歌搜索,我应该像“cursor.close()”一样关闭光标,但是如何处理房间数据库中的光标?

\n\n

谢谢你!

\n\n

错误 :

\n\n
Could 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)

android android-database android-room

5
推荐指数
0
解决办法
1787
查看次数

Room Database TypeConverter 在某些集合中不使用,例如 Set of String

所以我有这个数据对象,它有一组字符串(代表不可索引的关键字,但在这里无关紧要)作为成员,当这个集合为空时,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 …

android android-database android-room

5
推荐指数
1
解决办法
105
查看次数