小编dri*_*iAn的帖子

如何在 Room 持久化库中捕获未处理的异常

背景:

我在我的 Android (Java) 项目中使用 Room 持久性库来支持数据的本地缓存。Room 在查询或保存数据时在专用线程上运行。

问题:

如果在 Room 管理的这些线程之一中抛出异常,那么整个应用程序就会崩溃。这可能发生在数据不一致的情况下,例如数据与当前模式不匹配。这是非常成问题的。我宁愿自己处理此类异常并擦除本地数据库中的所有数据 - 这比让用户使用完全损坏且无法修复的应用程序要好。

示例异常:

2020-01-22 12:45:08.252 9159-11043/com.xyz E/AndroidRuntime: FATAL EXCEPTION: arch_disk_io_1
    Process: com.xyz, PID: 9159
    java.lang.RuntimeException: Exception while computing database live data.
        at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:92)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
        at java.lang.Thread.run(Thread.java:764)
     Caused by: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "primary" (class com.xyz.model.remotedatasource.sampleApi.entities.ProfileImage), not marked as ignorable (2 known properties: "isPrimary", "url"])
        at [Source: (byte[])":)
    ... -1, column: 402] (through reference chain: com.xyz.model.remotedatasource.sampleApi.entities.Candidate["profileImages"]->java.util.ArrayList[0]->com.xyz.model.remotedatasource.sampleApi.entities.ProfileImage["primary"])
        at com.xyz.model.localdatasource.Converters.deserialize(Converters.java:113)
        at com.xyz.model.localdatasource.Converters.toCandidate(Converters.java:73)
        at com.xyz.model.localdatasource.LocalDao_Impl$4.call(LocalDao_Impl.java:270)
        at com.xyz.model.localdatasource.LocalDao_Impl$4.call(LocalDao_Impl.java:217)
        at androidx.room.RoomTrackingLiveData$1.run(RoomTrackingLiveData.java:90) …
Run Code Online (Sandbox Code Playgroud)

java android android-room

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

将JQuery动画附加到方法/设置器而不是CSS属性?

来自JQuery参考@ http://api.jquery.com/animate/:

 $('#book').animate({
    opacity: 0.25,
    left: '+=50',
    height: 'toggle'   }, 5000, function() {
    // Animation complete.   
 });
Run Code Online (Sandbox Code Playgroud)

看起来我们只能修改真正的CSS属性,但是我希望我也能为JQuery对象属性设置动画.例如,我想为进度条的'value'属性设置动画:

http://jqueryui.com/demos/progressbar/#option-value

//setter
$('.selector').progressbar('option', 'value', 37);
Run Code Online (Sandbox Code Playgroud)

我找不到一种方法来为进度条的这个"值"属性设置动画,有没有办法这样做?

感谢帮助..

jquery-ui jquery-animate

4
推荐指数
1
解决办法
678
查看次数

令人困惑的评估PowerShell中的$ args

根据定义,$ args变量应包含传递给脚本函数的所有参数.但是,如果我在我的函数中构造一个管道,$ args变量的计算结果为null.谁知道为什么?

看这个例子:

function test { 1..3 | % { echo "args inside pipeline: $args" } ; echo "args outside pipeline: $args" }
Run Code Online (Sandbox Code Playgroud)

传递参数"hello"时,这是输出:

PS> test hello
args inside pipeline:
args inside pipeline:
args inside pipeline:
args outside pipeline: hello
Run Code Online (Sandbox Code Playgroud)

这有什么特别的原因吗?我知道如何解决这个问题,但是我想知道那里的anonye是否可以解释这个原因.

powershell arguments function

3
推荐指数
1
解决办法
793
查看次数

封装对象的生命周期管理

封装对象和管理其生命周期的最佳方法是什么?示例:我有一个类A,它包含一个B类型的对象,并且完全负责它.

解决方案1,克隆b对象以确保只有A能够清理它.

class A
{
    B *b;
public:
    A(B &b)
    {
        this->b = b.clone();
    }

    ~A()
    {
        delete b; // safe
    }
};
Run Code Online (Sandbox Code Playgroud)

解决方案2,直接使用传递的对象,我们冒险潜在的双重免费在这里.

class A
{
    B *b;
public:
    A(B *b)
    {
        this->b = b;
    }

    ~A()
    {
        delete b; // unsafe
    }
};
Run Code Online (Sandbox Code Playgroud)

在我的实际案例中,解决方案#2最适合.但是我想知道这是否被认为是错误的代码,因为有人可能不知道A的行为,即使它已被记录.我可以想到这些场景:

B *myB = new B();
A *myA = new A(myB);
delete myB; // myA contains a wild pointer now
Run Code Online (Sandbox Code Playgroud)

要么, …

c++ encapsulation memory-management

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