从firebase获取名称时在model_user中获取null-AndroidX

问题描述 投票:0回答:2

我在MainActivity中Iam时为空,当使用model_user从firebase中获取用户名settext时,这是我使用的代码

// MainActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
tools:context=".MainActivity">

<com.google.android.material.appbar.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <androidx.appcompat.widget.Toolbar
        android:id="@+id/Toolbar_Main"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimaryDark"
        android:theme="@style/Base.ThemeOverlay.AppCompat.Dark.ActionBar">

        <de.hdodenhof.circleimageview.CircleImageView
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:id="@+id/profile_image"
            android:src="@drawable/profile_blank"/>



        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/username"
            android:textSize="18sp"
            android:layout_marginLeft="25dp"
            android:textColor="#fff"
            android:textStyle="bold"
            android:layout_marginStart="25dp" />

    </androidx.appcompat.widget.Toolbar>

    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tab_layout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@color/colorPrimaryDark"
        app:tabSelectedTextColor="#fff"
        app:tabIndicatorColor="#fff"
        app:tabTextColor="#fff"/>

</com.google.android.material.appbar.AppBarLayout>

<androidx.viewpager.widget.ViewPager
    android:id="@+id/view_pager"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>

</LinearLayout>

// MainActivity.java

public class MainActivity extends AppCompatActivity {


CircleImageView profile_image;
TextView username;

FirebaseUser firebaseUser;
DatabaseReference reference;


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

    Toolbar toolbar_main = findViewById(R.id.Toolbar_Main);
    setSupportActionBar(toolbar_main);
    getSupportActionBar().setTitle("Login");
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setDisplayShowHomeEnabled(true);


    profile_image = findViewById(R.id.profile_image);
    username = findViewById(R.id.username);

    firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
    reference = FirebaseDatabase.getInstance().getReference("Users").child(firebaseUser.getUid());

    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            ModelUser modelUser = dataSnapshot.getValue(ModelUser.class);
            username.setText(modelUser.getUsername());
            if (modelUser.getImageURL().equals("default")){
                profile_image.setImageResource(R.mipmap.ic_launcher);
            } else {

                //change this
                Glide.with(getApplicationContext()).load(modelUser.getImageURL()).into(profile_image);
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    getMenuInflater().inflate(R.menu.menu_toolbar, menu);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item){
    switch (item.getItemId()){
        case R.id.menu_logout:
            FirebaseAuth.getInstance().signOut();
            startActivity(new Intent(MainActivity.this, StartActivity.class));
            finish();
            return true;
    }
    return false;
}

}

这是一个似乎为空的模型

ModelUser.java

public class ModelUser {
    private String id;
    private String username;
    private String imageURL;

    public ModelUser(String id, String username, String imageURL) {
        this.id = id;
        this.username = username;
        this.imageURL = imageURL;
    }


    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getImageURL() {
        return imageURL;
    }

    public void setImageURL(String imageURL) {
        this.imageURL = imageURL;
    }
}

似乎Model_user变为null,但我不知道为什么导致它

java android firebase firebase-realtime-database model
2个回答
1
投票

删除getter-setter并添加空的构造函数

ModelUser.java

  public class ModelUser {
    public String id;
    public String username;
    public String imageURL;

    public ModelUser(String id, String username, String imageURL) {
        this.id = id;
        this.username = username;
        this.imageURL = imageURL;
    }

    public ModelUser() {
    }
    }

尝试一下


0
投票

感谢您不需要删除setter getter,

所以从这里

public class ModelUser {
private String id;
private String username;
private String imageURL;

public ModelUser(String id, String username, String imageURL) {
    this.id = id;
    this.username = username;
    this.imageURL = imageURL;
}


public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getImageURL() {
    return imageURL;
}

public void setImageURL(String imageURL) {
    this.imageURL = imageURL;
}

}

只需添加一个空的构造函数,它将很好用:)

public class ModelUser {
public String id;
public String username;
public String imageURL;

public ModelUser(String id, String username, String imageURL) {
    this.id = id;
    this.username = username;
    this.imageURL = imageURL;
}

//Add this
public ModelUser() {
}

public String getId() {
    return id;
}

public void setId(String id) {
    this.id = id;
}

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getImageURL() {
    return imageURL;
}

public void setImageURL(String imageURL) {
    this.imageURL = imageURL;
}

}

© www.soinside.com 2019 - 2024. All rights reserved.