2016-05-10 59 views
1

我正在使用RealM庫將我的值存儲在數據庫中。 問題是,因爲RealM不支持AutoIncrement,所以我試圖通過我自己來實現它。使用RealM時的NullpointerException

這是我的情態類:

public class User extends RealmObject{ 

    @PrimaryKey 
    private int id; 
    private String name; 
    private int rollno; 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public int getRollno() { 
     return rollno; 
    } 

    public void setRollno(int rollno) { 
     this.rollno = rollno; 
    } 


    public int getid() { 
     return id; 
    } 

    public void setid(int id) { 
     this.id = id; 
    } 

} 

我我的主類我有一個名爲insertValues其中我在數據庫中插入數據的功能。

public void insertValues(Realm realm,String name,int rollNo) 
    { 

     realm.beginTransaction(); 

     int nextId = (int)(realm.where(User.class).maximumInt("id") + 1); // this line gives me nullpointer error. Please help 

     User user = realm.createObject(User.class); 
     user.setName(name); 
     user.setRollno(rollNo); 
     realm.commitTransaction(); 
    } 

我的logcat:

E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.NullPointerException 
at io.realm.RealmQuery.maximumInt(RealmQuery.java:1421) 
at realmsample.bd.com.realmsample.MainActivity.insertValues(MainActivity.java:105) 
at realmsample.bd.com.realmsample.MainActivity$1.onClick(MainActivity.java:53) 
at android.view.View.performClick(View.java:4240) 
at android.view.View$PerformClick.run(View.java:17721) 
at android.os.Handler.handleCallback(Handler.java:730) 
at android.os.Handler.dispatchMessage(Handler.java:92) 
at android.os.Looper.loop(Looper.java:137) 
at android.app.ActivityThread.main(ActivityThread.java:5103) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:525) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553) 
at dalvik.system.NativeStart.main(Native Method) 
+0

當你第一次在境界數據庫中添加一個對象,你行'realm.where(User.class).maximumInt(「ID」)'會給你NULL值,因爲沒有在數據庫中添加數據。在獲得最大價值表格數據庫之前,只保留一個if條件。 –

回答

3

here, 這是因爲您的問題非常相似, 這樣的建議,

如果最大相關函數被調用一個空結果查詢或者查詢的結果都是空值,則maximumInt會拋出異常。

因此改爲使用RealmQuery.max()

+0

你能告訴我一個例子來做到這一點..我沒有找到任何例子來做到這一點 –

+0

你沒有嘗試'max(「id」)'作爲上面的鏈接文檔。 –

+1

非常感謝!這解決了我的問題 –

1

問題出在您的代碼,而獲取「ID」字段的最大值。 當您在數據庫中添加第一個對象時,maximumInt(「id」)將爲NULL

所以你需要保持一個if條件來防止NPE。

int nextId = 1; 
if (realm.where(User.class).findAll().size() > 0) { 
    nextId = (int)(realm.where(User.class).maximumInt("id") + 1) 
} 
相關問題