簡體   English   中英

使用RealM時發生NullpointerException

[英]NullpointerException while using RealM

我正在使用RealM庫將值存儲在數據庫中。 問題在於,由於RealM不支持AutoIncrement,所以我試圖自己實現它。

這是我的模態課:

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)

請參閱此處 ,與您的問題非常相似,因此建議

如果在空結果查詢中調用了與max相關的函數,或者查詢的結果均為空值,則maximumInt將引發異常。

因此,請改用RealmQuery.max()

問題出在獲取“ 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)
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM