在Kotlin中的Loader中声明投影

时间:2018-10-20 12:12:29

标签: android kotlin

我开始学习Kotlin,所以我决定使用RecyclerView编写一个简单的应用程序,并与内容提供者的数据库进行交互。 目前,我在num_jobs = len([x for x in schedule if x[0] == 3]) 方法中停留在MainActivity中。 在Java中,我曾经以这种方式声明投影:

onCreateLoader

效果很好。但是在kotlin中,当我尝试以类似方式定义投影时,返回此错误:

String[] projection  = {
        WalletEntry._ID,
        WalletEntry.KEY_TITLE,
        WalletEntry.KEY_MONEY,
        WalletEntry.KEY_LAST_DATE,
        WalletEntry.KEY_LAST_EXPENSE,
        WalletEntry.KEY_LAST_TRANSACTION_TITLE
    };

它给我一个错误,说:类型不匹配 是否必需:Array <(out)String!>? 找到:Array <()->字符串> 老实说,我不知道如何解决它。我在某些源代码中看到,人们只是使用表的名称而不是调用Contract类及其条目,但是当更改表的名称时,我发现它有点混乱。

顺便说一句,表名之间没有逗号,AS发现它是意外令牌

那么,如何重新格式化我的投影以修复错误?

1 个答案:

答案 0 :(得分:0)

当您将字段列表包含在{}中时,kotlin将其解释为“函数”主体,返回值将是最后一行,因此kotlin发现的类型是:

Array<() -> String> // An array of functions with no parameters that returns strings

因此,当您创建数组时,当CursorLoader所需的类型为

时,您将在创建一个“函数”数组。
Array<(out) String!>? //A nullable array of strings

@rciovati告诉您,只需删除{},您将获得CursorLoader()的正确类型