简体   繁体   中英

Realm null object reference in Android

I'm having this issue with Realm in Android.

Full project can be found here " https://github.com/nabjitu/BikeShareW7 " Date: 18.04.18

When I try to add a Ride and afterwards end this ride, the app craches.

From the error message it seems to me like this error try to tell me that the Realm database is empty. But I don't think it is because the App manage to print following two statements, whereas last one of these it only printed if data is inserted with succes to the Realm database.

V/Database: Data Insertedeeee V/Database: Data Inserted

Can anybody see what I've done wrong here? Thank's in advance.

Here is what the error tells me:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nataliebrammerjensen.bikesharemlk/com.nataliebrammerjensen.bikesharemlk.EndRideActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.nataliebrammerjensen.bikesharemlk.database.Ride.getId()' on a null object reference

Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.nataliebrammerjensen.bikesharemlk.database.Ride.getId()' on a null object reference

Following is the full error message that I get:

04-18 09:38:15.761 4833-4833/com.nataliebrammerjensen.bikesharemlk E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                     Process: com.nataliebrammerjensen.bikesharemlk, PID: 4833
                                                                                     java.lang.RuntimeException: Unable to start activity ComponentInfo{com.nataliebrammerjensen.bikesharemlk/com.nataliebrammerjensen.bikesharemlk.EndRideActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.nataliebrammerjensen.bikesharemlk.database.Ride.getId()' on a null object reference
                                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2817)
                                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892)
                                                                                         at android.app.ActivityThread.-wrap11(Unknown Source:0)
                                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593)
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:105)
                                                                                         at android.os.Looper.loop(Looper.java:164)
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:6541)
                                                                                         at java.lang.reflect.Method.invoke(Native Method)
                                                                                         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240)
                                                                                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767)
                                                                                      Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.nataliebrammerjensen.bikesharemlk.database.Ride.getId()' on a null object reference
                                                                                         at com.nataliebrammerjensen.bikesharemlk.RealmDBStuff$7.execute(RealmDBStuff.java:145)
                                                                                         at io.realm.Realm.executeTransaction(Realm.java:1405)
                                                                                         at com.nataliebrammerjensen.bikesharemlk.RealmDBStuff.getLastAdded(RealmDBStuff.java:139)
                                                                                         at com.nataliebrammerjensen.bikesharemlk.EndFragment.updateUI(EndFragment.java:83)
                                                                                         at com.nataliebrammerjensen.bikesharemlk.EndFragment.onCreateView(EndFragment.java:45)
                                                                                         at android.support.v4.app.Fragment.performCreateView(Fragment.java:2261)
                                                                                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1419)
                                                                                         at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1750)
                                                                                         at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1819)
                                                                                         at android.support.v4.app.BackStackRecord.executeOps(BackStackRecord.java:797)
                                                                                         at android.support.v4.app.FragmentManagerImpl.executeOps(FragmentManager.java:2590)
                                                                                         at android.support.v4.app.FragmentManagerImpl.executeOpsTogether(FragmentManager.java:2377)
                                                                                         at android.support.v4.app.FragmentManagerImpl.removeRedundantOperationsAndExecute(FragmentManager.java:2332)
                                                                                         at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:2239)
                                                                                         at android.support.v4.app.FragmentManagerImpl.dispatchStateChange(FragmentManager.java:3231)
                                                                                         at android.support.v4.app.FragmentManagerImpl.dispatchActivityCreated(FragmentManager.java:3181)
                                                                                         at android.support.v4.app.FragmentController.dispatchActivityCreated(FragmentController.java:192)
                                                                                         at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:572)
                                                                                         at android.support.v7.app.AppCompatActivity.onStart(AppCompatActivity.java:177)
                                                                                         at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1333)
                                                                                         at android.app.Activity.performStart(Activity.java:6992)
                                                                                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2780)
                                                                                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2892) 
                                                                                         at android.app.ActivityThread.-wrap11(Unknown Source:0) 
                                                                                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1593) 
                                                                                         at android.os.Handler.dispatchMessage(Handler.java:105) 
                                                                                         at android.os.Looper.loop(Looper.java:164) 
                                                                                         at android.app.ActivityThread.main(ActivityThread.java:6541) 
                                                                                         at java.lang.reflect.Method.invoke(Native Method) 
                                                                                         at com.android.internal.os.Zygote$MethodAndArgsCaller.run(Zygote.java:240) 
                                                                                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:767) 

I found a workaround solution. Following method works for some reason.

//Works
public void writeToDB(final String bikeName, final String startRide, 
final String endRide){
    realm.executeTransactionAsync(new Realm.Transaction() {
        @Override
        public void execute(Realm bgRealm) {
            Ride ride = bgRealm.createObject(Ride.class);
            ride.setMbikeName(bikeName);
            ride.setMstartRide(startRide);
            ride.setMendRide(startRide);
        }
    },  new Realm.Transaction.OnSuccess() {
        @Override
        public void onSuccess() {
            //Transaction was a success.
            Log.v("Database", "Data Inserted");
        }
    }, new Realm.Transaction.OnError() {
        @Override
        public void onError(Throwable error) {
            //TRansaction failed and was automaticcaly cancelled
            Log.e("Database", error.getMessage());

        }
    });
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM