Ссылка на нулевой объект в методе firebase ondatachange после проверки, чтобы убедиться, что объект не равен нулю

Я пытаюсь установить текст TextView на основе значения, полученного из базы данных Firebase. Я могу напечатать строку в методе, и я добавил проверку, чтобы не устанавливать текст, если String имеет значение null, но проверка передана, и когда я вызываю setText, я получаю ссылку на нулевой объект.

Вот MapsActivity.java

private TextView headerText;  
private FirebaseAuth mAuth = FirebaseAuth.getInstance();
private FirebaseUser currentUser = mAuth.getCurrentUser();
private FirebaseDatabase database = FirebaseDatabase.getInstance();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_maps);


    headerText = (TextView) findViewById(R.id.header_text);
    DatabaseReference ref = database.getReference("Users/"+currentUser.getUid()+"/user_name");
    ref.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            String userName = (String) dataSnapshot.getValue();

            //debugging
            Toast.makeText(MapsActivity.this, userName, Toast.LENGTH_SHORT).show();

            //passes check and attempts to set
            if(userName!=null)
                headerText.setText(userName);
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

Вот nav_header.xml

  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:layout_width="match_parent"
      android:layout_height="90dp"
      android:background="?attr/colorPrimary"
      android:padding="16dp"
      android:theme="@style/AppTheme"
      android:orientation="vertical"
      android:gravity="bottom">

<TextView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/header_text">

</TextView>

Я удостоверился, что ссылка действительна и String присваивается userName. Я использую onDataChange для установки значений в других местах проекта и раньше не сталкивался с этой проблемой.

Спасибо за любую помощь

РЕДАКТИРОВАТЬ: для полноты, здесь activity_maps.xml

<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="#eaeaea"
        app:popupTheme="@style/AppTheme.PopupOverlay"
        app:title="Map" />

    <FrameLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <fragment
            android:id="@+id/map"
            android:name="com.google.android.gms.maps.SupportMapFragment"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

        </fragment>

    </FrameLayout>

</LinearLayout>

<android.support.design.widget.NavigationView
    android:id="@+id/nav_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="start"
    android:fitsSystemWindows="true"
    app:menu="@menu/nav_menu"
    app:headerLayout="@layout/nav_header"/>

  </android.support.v4.widget.DrawerLayout>

можем ли мы увидеть вашу трассировку стека, когда возникнет проблема?

Levi Moreira 11.04.2018 12:59

проверить этот ответ stackoverflow.com/questions/33194594/…

Levi Moreira 11.04.2018 13:02
0
2
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Использовать это NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view); View header = navigationView.getHeaderView(0) TextView headerText = (TextView) header.findViewById(R.id.header_text);

затем установите в TextView следующим образом

headerText.setText(userName);

Другие вопросы по теме