实时数据类型方法在Java中返回什么?

时间:2018-09-27 13:27:19

标签: android nullpointerexception

我正在为我的Room Database类编写一个测试用例,并且所有查询的返回类型均为LiveData。这样。

@Query("Select * from location")
LiveData<List<LocationDetails>> getAllRecords();

据我了解,无论我想在代码中使用这些查询什么地方。我将它们与.observables一起使用,因此可以相应地更改我的看法。以及那些可观察的呼叫,请返回列表供我使用。所以我认为它给了我LiveData的价值。与

一样
LiveData<List<LocationDetails>>.getvalue() 

确实。 (我知道它不是那样,而只是让您了解我的意思。)

因此在编写我的单元测试时。我必须使用查询,但显然没有可观察对象。如果我这样做的话:

LiveData<List<LocationDetails>> parsingObject =  mDao.getAllRecords();

这给了我这个错误。

java.lang.NullPointerException
at genesis.com.getlocation.MyDaoTest.validateGetRecord(MyDaoTest.java:70).

但在assertNotNull(parsingObject)上没有错误。

但是,如果我进行查询时没有使用LiveData类型(如下所示)。并在我的测试中使用它。然后,我当然会得到一个可以使用的列表,它运行良好。

List<LocationDetails>;

那么,有人可以告诉我如何使用LiveData类型的方法吗?

Test.class

package genesis.com.getlocation;
import android.arch.lifecycle.LiveData;
import android.arch.persistence.room.Room;
import android.content.Context;
import android.os.Bundle;
import android.support.test.InstrumentationRegistry;
import android.support.test.runner.AndroidJUnit4;

import org.json.JSONException;
import org.json.JSONObject;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.List;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;

@RunWith(AndroidJUnit4.class)
public class MyDaoTest {

    private LocationDetails locationDetails = new LocationDetails();
    private Database mDb;
    private MyDao mDao;

    @Before
    public void createDb() {

        Context context = InstrumentationRegistry.getTargetContext();
        mDb = Room.inMemoryDatabaseBuilder(context, Database.class).build();
        mDao = mDb.myDao();
    }

    @After
    public void tearDown() throws Exception {
        mDb.close();
    }

    @Test
    public void validateInsertRecord(){
        JSONObject jsonStringOject= new JSONObject();
        try {
            jsonStringOject.put("name", "asd");
            jsonStringOject.put("address", "asd");
            jsonStringOject.put("date", "asd");
            jsonStringOject.put("note", "asd");
            jsonStringOject.put("radioButtonValue", "asd");

            locationDetails.setObject(jsonStringOject.toString());
            locationDetails.setLongitude(654654);
            locationDetails.setLatitude(564654);
        } catch (JSONException e) {
            e.printStackTrace();
            fail();
        }
        mDao.insertRecord(locationDetails);
    }

    @Test
    public void validateGetRecord(){
        LiveData<List<LocationDetails>> parsingObject =  mDao.getAllRecords();
        assertNotNull(parsingObject);
        Bundle bundle = new Bundle();
        for (LocationDetails location : parsingObject.getValue()) {
            String ObjectString = location.getObject();
            JSONObject json;
            try {
                json = new JSONObject(ObjectString);
                bundle.putString("name",json.getString("name"));
                bundle.putString("address",json.getString("address"));
                bundle.putString("date",json.getString("date"));
                bundle.putString("note",json.getString("note"));
                bundle.putString("radioButtonValue",json.getString("radioButtonValue"));
                bundle.putString("id", String.valueOf(location.getId()));
                bundle.putString("latitude", String.valueOf(location.getLatitude()));
                bundle.putDouble("longitude", location.getLongitude());
                System.out.println(String.valueOf(location.getLatitude()));
                assertEquals(String.valueOf(locationDetails.getLatitude()),bundle.getString("latitude"));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
    }

0 个答案:

没有答案