2015-06-18 57 views
3

我試圖用華麗的科特林和SugarORM組合爲Android開發,並有我的模型設置是這樣的:SugarORM +科特林:Unresovled參考「listAll」

import com.orm.SugarRecord 

public class Contact : SugarRecord<Contact>() { 
    var name : String = "" 
    var phoneNumber : String = "" 
    var info : String? = null 
} 

當然,我也改變了AndroidManifest.xml

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" 
    tools:replace="android:icon" 
    android:name="com.orm.SugarApp"> 

    <meta-data android:name="DATABASE" android:value="database.db" /> 
    <meta-data android:name="VERSION" android:value="1" /> 
    <meta-data android:name="QUERY_LOG" android:value="true" /> 
    <meta-data android:name="DOMAIN_PACKAGE_NAME" android:value="/* same as package attribute on manifest element */" /> 

    <activity>…</activity> 
</application> 

現在,我嘗試使用內MainActivity.kt模型:

override fun onCreateOptionsMenu(menu: Menu?): Boolean { 
    val contacts = Contact.listAll(javaClass(Contact)) 
    // or val contacts : List<Contact> = Contact.listAll(javaClass(Contact)) 

    return true 
} 

但是得到錯誤Unresolved reference: listAll,這意味着由於某種原因靜態方法調用失敗。和find一樣......我忽略了什麼?

在此先感謝您的幫助。

回答

6

由於這些是靜態方法,您需要在聲明類SugarRecord上調用它們。你的代碼應該是:

SugarRecord.listAll(Contact::class.java) 
0

由於缺乏更好的解釋,這似乎是一個Kotlin錯誤。看起來靜態方法不是繼承的。創建一個輔助類是這樣的:

public class ModelHelper {  
    public static List<Contact> getAllContacts() { 
     return Contact.listAll(Contact.class); 
    } 
} 

,並從科特林代碼調用此類似

override fun onCreateOptionsMenu(menu: Menu?): Boolean { 
    val contacts = ModelHelper.getAllContacts()  
    return true 
} 

作品。

+1

這不是一個bug,每個設計都不會繼承靜態方法。 –