工具栏无法投射

时间:2019-06-30 21:10:53

标签: android firebase-realtime-database android-toolbar

单击每个用户以打开每个用户的消息活动后,我试图在聊天应用程序中进行创建,但是我使用的是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)

我希望向我展示每个用户的空白活动,而不是向我显示应用程序的疯狂情况。

2 个答案:

答案 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());