Firebase List Adapter: ошибка "нулевая ссылка на объект" - PullRequest
0 голосов
/ 01 июня 2018

Я пытаюсь научиться использовать firebase, но при попытке загрузить данные в listView приложение возвращает ошибку:

java.lang.RuntimeException: Невозможно запустить действие ComponentInfo {моя деятельность} 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;
}

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

com.firebase.ui.database.FirebaseListAdapter.startListening () 'для нулевой ссылки на объект.

сообщает, что для startListening не установлен адаптер, поэтому

Просто замените

FirebaseListAdapter adapter;

на

FirebaseListAdapter<LocationData> adapter;

, так как вы создаете адаптер неправильно, и это позволит вам заполнить его.

Остальная часть кода в порядке, как указано в документации

0 голосов
/ 01 июня 2018

Вместо этого

adapter.startListening();

&

adapter.stopListening();

вы можете сделать как -

FirebaseListOptions<LocationData> options = new FirebaseListOptions.Builder<LocationData>()
        .setLayout(R.layout.list_location)
        .setQuery(query,LocationData.class)
        .setLifecycleOwner(this) 
        .build();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...