小编Oda*_*aym的帖子

更改NumberPicker的文本颜色

我已经查看了大部分线程,并且没有提供可行的答案.样式化NumberPicker不起作用(根据此线程:NumberPicker textColour)

将numberPicker上的style属性设置为具有颜色项的样式也没有任何效果.在numberPicker XML上设置textColor属性也不做任何事情.

我最接近的是使用numberPicker将其getChildAt()转换为EditText,然后对该EditText执行setColor(),但这只会在初始化时更改子颜色,然后每次从中选择在其上; 不是我要找的东西.

有帮助吗?谢谢

android textcolor numberpicker

43
推荐指数
6
解决办法
4万
查看次数

使用迁移升级Room DB会导致数据库锁定

我将回答我自己的问题,这是问题描述.

所以我有一个在商店发布的应用程序,并且我想要发布的新版本,数据库模式已经改变,所以我自然不得不进行迁移,负责将其从版本3升级到最新版本这包括提供3到4和4到5的迁移.或者一次性从3到5.

这就是我所做的,我提供了这些迁移并将它们提供给Room databaseBuilder(),并且所有内容都已到位以模拟应用程序升级的场景(安装Store版本,运行它,登录,创建DB,生产生产APK并通过终端安装在设备上,运行)

这样做总是产生以下异常:

05-19 02:38:00.363 6472-6522/co.myapp.app E/ROOM: Invalidation tracker is initialized twice :/.
05-19 02:38:00.378 6472-6549/co.myapp.app E/ROOM: Cannot run invalidation tracker. Is the db closed?
java.lang.IllegalStateException: The database '/data/user/0/co.myapp.app/databases/my_db' is not open.
at android.database.sqlite.SQLiteDatabase.throwIfNotOpenLocked(SQLiteDatabase.java:2765)
at android.database.sqlite.SQLiteDatabase.createSession(SQLiteDatabase.java:490)
at android.database.sqlite.SQLiteDatabase$1.initialValue(SQLiteDatabase.java:88)
at android.database.sqlite.SQLiteDatabase$1.initialValue(SQLiteDatabase.java:87)
at java.lang.ThreadLocal.setInitialValue(ThreadLocal.java:160)
at java.lang.ThreadLocal.get(ThreadLocal.java:150)
at android.database.sqlite.SQLiteDatabase.getThreadSession(SQLiteDatabase.java:484)
at android.database.sqlite.SQLiteProgram.getSession(SQLiteProgram.java:107)
at android.database.sqlite.SQLiteStatement.executeUpdateDelete(SQLiteStatement.java:64)
at android.arch.persistence.db.framework.FrameworkSQLiteStatement.executeUpdateDelete(FrameworkSQLiteStatement.java:45)
at android.arch.persistence.room.InvalidationTracker$1.run(InvalidationTracker.java:321)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
at java.lang.Thread.run(Thread.java:762)
Run Code Online (Sandbox Code Playgroud)

迁移成功运行并且正在按照我的编写创建表,但是在Room升级数据库版本并迁移之后,该异常一直出现在每个数据库访问操作上.升级后的每次读取或写入都会导致此异常

  • 首先我认为这是迁移的一个问题,但迁移是正确的(SQL已被检查,Room没有抱怨任何类型的东西,通常情况非常好,并告诉你什么不匹配).
  • 然后我认为问题在于同时为它提供2次迁移(我以前做过,并且没有问题)但我删除了4到5次迁移并将其放在3到5之间以运行整个事情一个人去.没用
  • 然后我想好了,我总是可以放弃并说好,只需做fallbackToDestructiveMigration()并让Room重新创建所有内容,导致所有用户退出并丢失数据,这是我不想做但我只是想要的看看这会导致什么.所以我没有提供迁移,只是忽略了它们.例外仍然发生.

这个异常是静默发生的,它没有崩溃应用程序,也没有引用我的代码中的任何地方,它只是发生在Logcat中,并且在它发生甚至一次时阻止了任何类型的数据库访问.无论您是否已经提供了迁移代码,或者您是否想要回退到破坏性迁移,当Room检测到您已升级数据库时,它会将其锁定并阻止对其进行任何访问.

我已经在三星S6,Nexus 5,OnePlus,摩托罗拉Moto C和Google Pixel上测试了这一点,到处都是完全相同的问题.

sql android android-room

9
推荐指数
1
解决办法
1899
查看次数

将 repo 移动到另一台计算机

我已将存储库从计算机 A 移至计算机 B。我已验证等待推送的提交仍在 B 上,但整个存储库(每个文件)都未暂存。我不想添加它们并将它们作为提交推送,因为从复制 repo 到粘贴它,我没有更改每个文件。当我移动 repo 时,它只有待推送的提交,而不是更改。

我见过这个问题,但它没有帮助。

git copy repository

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

添加多个提醒会导致它们同时触发

我在这里包含完整的问题描述,因为我不确定解决方案背后的逻辑是否正确,但我很确定它与我设置警报本身的方式有关,导致这种不准确,或者有时只是纯粹的故障(警报根本不会触发).


用户可以从药物列表中添加新药物.

屏幕1

找到某种药物后,点击它会显示此屏幕http://imgur.com/nLC9gTG

该屏幕包含Medication的名称,在"Posology"标题下(绿色栏)是可以添加该Medication的提醒的地方.

忘记"单位"字段.

"频率"字段接受一个数字,"频率"字段右侧的标签是可点击的,它会显示一个下拉菜单,用户可以从中选择"每日时间"或"每周时间".

"星期几"标签(屏幕截图中的标签为空)也是可点击的,它向用户显示一个下拉菜单,用户可以从一周中选择多天.

"治疗持续时间"字段接受一个数字,"治疗持续时间"字段右侧的标签将反映用户选择的"频率"(如果是"每周一次",那么该标签将说"周",如果是"每月一次"然后该标签将说"几个月").


屏幕2

在第二个屏幕截图中http://imgur.com/AcUmlHH - 有一个开关允许用户启用他试图添加的此药物(项目,实例等)的提醒.

如果上面的"频率"字段的数字大于0(例如2),则提醒开关将创建一个提醒字段列表,它将显示在"获取通知"绿色栏的下方.

当用户最终按下"添加药物"时,将在数据库中创建新的药物对象,以及用户为此药物对象选择添加的"频率"(提醒的数量).


创建一个Medication表:

id
name
description
dosage
frequency
frequencyType
treatmentDuration
ForeignCollection<MedicationReminder>
ArrayList<DayChoice> (DayChoice is a class with "Day Name" and "Selected")
when
whenString
units
unitForm
remarks
remindersEnabled
Run Code Online (Sandbox Code Playgroud)

创建MedicationReminder表:

Medication (foreign key for the Medication table)
Calendar
int[] days_of_week
totalTimesToTrigger
Run Code Online (Sandbox Code Playgroud)

在创建此新的Medication对象时:

Medication medication = new Medication();
medication.setFrequency()
medication.setName().setDosage().setRemindersEnabled()....

assignForeignCollectionToParentObject(medication);
Run Code Online (Sandbox Code Playgroud)

assignForeignCollectionToParentObject(药物)

private void assignForeignCollectionToParentObject(Medication medicationObject) {
    medicationDAO.assignEmptyForeignCollection(medicationObject, "medicationReminders");

    MedicationRemindersRecyclerAdapter adapter =
        (MedicationRemindersRecyclerAdapter) remindersRecyclerView.getAdapter();

    //Clear previous reminders
    medicationObject.getMedicationReminders().clear(); …
Run Code Online (Sandbox Code Playgroud)

android calendar alarmmanager alarms

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

Picasso 不会从 API 28 中的 HTTP 链接加载图像

所以我最近遇到了一个问题,只有来自 HTTPS 链接的图像才能成功加载,而所有其他图像都不能。这发生在我切换到 API 28 时。它在 28 之前从未这样做过。它在无法加载的所有图像上静默失败,或者只说“无法满足的请求”。这是版本2.71828

android image http picasso

0
推荐指数
1
解决办法
1083
查看次数