首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Firebase列表适配器:错误"null object reference“

Firebase列表适配器:错误"null object reference“
EN

Stack Overflow用户
提问于 2018-06-02 04:35:21
回答 2查看 679关注 0票数 1

我正在尝试使用firebase,但当尝试在listView中加载数据时,应用程序返回错误:

java.lang.RuntimeException:无法启动activity ComponentInfo {my activity} java.lang.NullPointerException:尝试对空对象引用调用虚方法'void com.firebase.ui.database.FirebaseListAdapter.startListening ()‘。

如果有人能看到这个问题,那将是非常有帮助的。

我的数据库的方面:

location
   40434734
      latitude: 40.434734
      longitude: -3.70701
      txt: "test"

我的班级:

public class start extends AppCompatActivity{

ListView lv;

FirebaseListAdapter adapter;

@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
    super.onCreate(savedInstanceState, persistentState);

    lv = (ListView) findViewById(R.id.listView);
    Query query = FirebaseDatabase.getInstance().getReference().child("location");

    FirebaseListOptions<LocationData> options = new FirebaseListOptions.Builder<LocationData>()
            .setLayout(R.layout.list_location)
            .setQuery(query,LocationData.class)
            .build();
    adapter = new FirebaseListAdapter(options) {
        @Override
        protected void populateView(View v, Object model, int position) {
            TextView stdID = v.findViewById(R.id.nombre);
            LocationData  ld = (LocationData) model;
            stdID.setText(ld.getTxt().toString());
        }
    };
    lv.setAdapter(adapter);

}

@Override
protected void onStart() {
    super.onStart();
    adapter.startListening();
}

@Override
protected void onStop() {
    super.onStop();
    adapter.stopListening();
}

}

创建对象的LocationData类:

public class LocationData {

double latitude;
double longitude;
String txt;

public LocationData(){

}
public LocationData(double latitude, double longitude, String txt) {
    this.latitude = latitude;
    this.longitude = longitude;
    this.txt = txt;
}
public String getTxt() {
    return txt;
}

public void setTxt(String txt) {
    this.txt = txt;
}

public double getLatitude() {
    return latitude;
}

public void setLatitude(double latitude) {
    this.latitude = latitude;
}

public double getLongitude() {
    return longitude;
}

public void setLongitude(double longitude) {
    this.longitude = longitude;
}
EN

回答 2

Stack Overflow用户

发布于 2018-06-02 04:52:58

而不是这个

adapter.startListening();

&

adapter.stopListening();

你可以这样做-

FirebaseListOptions<LocationData> options = new FirebaseListOptions.Builder<LocationData>()
        .setLayout(R.layout.list_location)
        .setQuery(query,LocationData.class)
        .setLifecycleOwner(this) 
        .build();
票数 0
EN

Stack Overflow用户

发布于 2018-06-02 07:12:08

在空对象引用上执行

com.firebase.ui.database.FirebaseListAdapter.startListening ()‘。

告诉您没有设置为startListening的适配器,因此

只要改变这一点

FirebaseListAdapter adapter;

到这个

FirebaseListAdapter<LocationData> adapter;

由于您以错误的方式创建适配器,因此这样做将允许您填充它。

正如文档所述,代码的其余部分都是正常的

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50650685

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档