单击每个用户以打开每个用户的消息活动后,我试图在聊天应用程序中进行创建,但是我使用的是androidx,并且无法将工具栏强制转换为android.widget.Toolbar。我想向我展示仅有一个带有用户名的文本。我从cardview中获取ID“ username1”。我在另一个xml中使用了username1作为出现所有用户的类。这是我的数据库:
消息活动:
@RequiredArgsConstructor
用于消息活动的xml
public class MessageActivity extends AppCompatActivity {
TextView username;
FirebaseUser fuser;
DatabaseReference reference;
Intent intent;
@Override
protected void onCreate (Bundle savedInstanceState) {
super.onCreate ( savedInstanceState );
setContentView ( R.layout.activity_message );
TabLayout appBarLayout=findViewById ( R.id.tab_2);
username=findViewById ( R.id.username1 );
intent=getIntent ();
String userid=intent.getStringExtra ( "userid" );
fuser= FirebaseAuth.getInstance ().getCurrentUser ();
reference= FirebaseDatabase.getInstance ().getReference ("users").child ( "FIRST NAME");
reference.addValueEventListener ( new ValueEventListener () {
@Override
public void onDataChange (@NonNull DataSnapshot dataSnapshot) {
User user=dataSnapshot.getValue (User.class);
username.setText ( user.getFirstName () );
}
@Override
public void onCancelled (@NonNull DatabaseError databaseError) {
}
} );
}
}
在调试器中显示给我的东西
<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="match_parent"
tools:context=".MessageActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#00FFFFFF">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#4CAF50" />
<androidx.viewpager.widget.ViewPager
android:id="@+id/view_pager2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
</com.google.android.material.appbar.AppBarLayout>
</LinearLayout>
用户类别:
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sportsbuddy, PID: 858
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String com.example.sportsbuddy.User.getFirstName()' on a null object reference
at com.example.sportsbuddy.MessageActivity$1.onDataChange(MessageActivity.java:47)
at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@17.0.0:75)
at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@17.0.0:63)
at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@17.0.0:55)
at android.os.Handler.handleCallback(Handler.java:873)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:6986)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)
我希望向我展示每个用户的空白活动,而不是向我显示应用程序的疯狂情况。
答案 0 :(得分:0)
这不是工具栏的问题,而是数据库请求的问题。错误在此行
User user=dataSnapshot.getValue (User.class);
用户为空。
答案 1 :(得分:0)
您正在这样设置reference
:
reference= FirebaseDatabase.getInstance ().getReference ("users").child ( "FIRST NAME");
因此,这指向/users/FIRST NAME
,在您的JSON中不存在。这意味着您的dataSnapshot
将为空。
我的猜测是,您想引用当前用户的节点,您可以这样做:
reference= FirebaseDatabase.getInstance ().getReference ("users").child (userid);
或
reference= FirebaseDatabase.getInstance ().getReference ("users").child (fuser.getUid());