在 Android Studio Java 中登录 MainActivity 时应用程序崩溃

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

我使用 Firebase 作为我的应用程序的数据库,该应用程序是一个聊天应用程序。每当我尝试登录或注册我的应用程序的主要活动时,我的应用程序就会崩溃,该应用程序会自动崩溃。

MainActivity.java

package com.vortexv.vconnect;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;

import androidx.activity.EdgeToEdge;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.google.firebase.Firebase;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;

public class MainActivity extends AppCompatActivity {

    FirebaseAuth auth;
    RecyclerView mainUserRecyclerView;
    UserAdapter adapter;
    FirebaseDatabase database;
    ArrayList<Users> usersArrayList;

    @SuppressLint("MissingInflatedId")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EdgeToEdge.enable(this);
        setContentView(R.layout.activity_main);
        getSupportActionBar().hide();

        database = FirebaseDatabase.getInstance();
        auth = FirebaseAuth.getInstance();
        DatabaseReference reference = database.getReference().child("user");
        usersArrayList = new ArrayList<>();

        mainUserRecyclerView = (RecyclerView)findViewById(R.id.mainUserRecyclerView);
        mainUserRecyclerView.setLayoutManager(new LinearLayoutManager(this));
        adapter = new UserAdapter(MainActivity.this, usersArrayList);
        mainUserRecyclerView.setAdapter(adapter);

        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                for (DataSnapshot dataSnapshot: snapshot.getChildren())
                {
                    Users users = dataSnapshot.getValue(Users.class);
                    usersArrayList.add(users);
                }
                adapter.notifyDataSetChanged();
            }

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

            }
        });




        if (auth.getCurrentUser() == null) {
            Intent intent = new Intent(MainActivity.this, Login.class);
            startActivity(intent);
        }
    }
}

用户.java

package com.vortexv.vconnect;

public class Users {
    String profilepic,mail,userName,password,userID,lastMessage,status;

    public Users(String id, String namee, String emaill, String password, String imageuri, String status){
        this.userID = id;
        this.userName = namee;
        this.mail = emaill;
        this.password = password;
        this.profilepic = imageuri;
        this.status = status;
    }

    public String getProfilepic() {
        return profilepic;
    }

    public void setProfilepic(String profilepic) {
        this.profilepic = profilepic;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserID() {
        return userID;
    }

    public void setUserID(String userID) {
        this.userID = userID;
    }

    public String getLastMessage() {
        return lastMessage;
    }

    public void setLastMessage(String lastMessage) {
        this.lastMessage = lastMessage;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

MainActivity.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/main_bg"
    tools:context=".MainActivity">

    <LinearLayout
        android:id="@+id/toolBar"
        android:layout_width="wrap_content"
        android:layout_height="63dp"
        android:layout_alignParentStart="true"
        android:layout_alignParentEnd="true"
        android:layout_marginStart="23dp"
        android:layout_marginTop="@dimen/_24sdp"
        android:layout_marginEnd="25dp"
        android:background="@color/white"
        android:gravity="right"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_marginLeft="23dp"
        android:layout_marginRight="25dp">


        <TextView
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginStart="@dimen/_10sdp"
            android:layout_marginLeft="@dimen/_10sdp"
            android:layout_weight="1"
            android:fontFamily="@font/poppins_semibold"
            android:text="Vortex Connect"
            android:textColor="@color/black"
            android:textSize="@dimen/_20sdp"
            android:textStyle="bold" />

        <ImageView
            android:id="@+id/logout_img"
            android:layout_width="@dimen/_50sdp"
            android:layout_height="@dimen/_50sdp"
            android:layout_gravity="center"
            android:layout_marginRight="@dimen/_10sdp"
            android:layout_weight="1"
            app:srcCompat="@drawable/baseline_logout_24" />

    </LinearLayout>

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/mainUserRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="369dp"
        android:layout_below="@id/toolBar"
        android:layout_alignParentStart="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="7dp"
        android:layout_marginLeft="7dp"
        android:layout_marginTop="159dp"
        android:layout_marginEnd="18dp"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="114dp" />

    <ImageView
        android:layout_width="@dimen/_32sdp"
        android:layout_height="@dimen/_32sdp"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="@dimen/_72sdp"
        android:layout_marginRight="270dp"
        android:layout_marginBottom="@dimen/_32sdp"
        android:src="@drawable/camera_white_icon" />

    <ImageView
        android:layout_width="@dimen/_32sdp"
        android:layout_height="@dimen/_32sdp"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="@dimen/_138sdp"
        android:layout_marginRight="193dp"
        android:layout_marginBottom="@dimen/_32sdp"
        android:src="@drawable/chats_white_icon" />

    <ImageView
        android:layout_width="@dimen/_32sdp"
        android:layout_height="@dimen/_32sdp"
        android:layout_alignParentStart="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentBottom="true"
        android:layout_marginStart="@dimen/_200sdp"
        android:layout_marginRight="113dp"
        android:layout_marginBottom="@dimen/_32sdp"
        android:src="@drawable/settings_white_icon" />
</RelativeLayout>

堆栈跟踪

FATAL EXCEPTION: main                                                                                                 Process: com.vortexv.vconnect, PID: 28436
                                                                                                    com.google.firebase.database.DatabaseException: Class com.vortexv.vconnect.Users does not define a no-argument constructor. If you are using ProGuard, make sure these constructors are not stripped.
                                                                                                        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:578)
                                                                                                        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper$BeanMapper.deserialize(CustomClassMapper.java:571)
                                                                                                        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertBean(CustomClassMapper.java:433)
                                                                                                        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(CustomClassMapper.java:232)
                                                                                                        at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(CustomClassMapper.java:80)
                                                                                                        at com.google.firebase.database.DataSnapshot.getValue(DataSnapshot.java:202)
                                                                                                        at com.vortexv.vconnect.MainActivity$1.onDataChange(MainActivity.java:56)
                                                                                                        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(ValueEventRegistration.java:75)
                                                                                                        at com.google.firebase.database.core.view.DataEvent.fire(DataEvent.java:63)
                                                                                                        at com.google.firebase.database.core.view.EventRaiser$1.run(EventRaiser.java:55)
                                                                                                        at android.os.Handler.handleCallback(Handler.java:942)
                                                                                                        at android.os.Handler.dispatchMessage(Handler.java:99)
                                                                                                        at android.os.Looper.loopOnce(Looper.java:211)
                                                                                                        at android.os.Looper.loop(Looper.java:300)
                                                                                                        at android.app.ActivityThread.main(ActivityThread.java:8348)
                                                                                                        at java.lang.reflect.Method.invoke(Native Method)
                                                                                                        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:582)
                                                                                                        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1028)

提供日志(如果有帮助):

链接-因为它在发布页面上显示垃圾邮件

我正在 YouTube 上观看制作此应用程序的教程。这是链接:点击这里`

我的应用程序在我的主要活动(即我的聊天主屏幕)上崩溃。

我厌倦了重写代码,但我的问题没有解决。请帮忙!!

java android firebase firebase-realtime-database firebase-authentication
1个回答
0
投票

您收到以下错误:

com.google.firebase.database.DatabaseException:类 com.vortexv.vconnect.Users 未定义无参数构造函数。

因为你的

Users
类确实 not 包含无参构造函数。

在Java中,当类没有构造函数时,编译器会自动添加一个默认的无参构造函数。当您在类中定义任何构造函数时,默认的无参数构造函数就会消失。

您在类中定义了一个带有 6 个参数的构造函数。因此,只要类中存在此构造函数,无参构造函数就不存在,因此您必须创建一个:

public class Users {
    String profilepic,mail,userName,password,userID,lastMessage,status;

    public Users() {} //👈

    public Users(String id, String namee, String emaill, String password, String imageuri, String status){
        this.userID = id;
        this.userName = namee;
        this.mail = emaill;
        this.password = password;
        this.profilepic = imageuri;
        this.status = status;
    }

    public String getProfilepic() {
        return profilepic;
    }

    public void setProfilepic(String profilepic) {
        this.profilepic = profilepic;
    }

    public String getMail() {
        return mail;
    }

    public void setMail(String mail) {
        this.mail = mail;
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUserID() {
        return userID;
    }

    public void setUserID(String userID) {
        this.userID = userID;
    }

    public String getLastMessage() {
        return lastMessage;
    }

    public void setLastMessage(String lastMessage) {
        this.lastMessage = lastMessage;
    }

    public String getStatus() {
        return status;
    }

    public void setStatus(String status) {
        this.status = status;
    }
}

当 Firebase 实时数据库 SDK 从数据库反序列化对象时,它要求任何正在使用的对象都具有此构造函数,以便可以使用它来实例化对象。

如果您没有公共无参数构造函数,则 SDK 并不真正知道如何创建它的实例。所以必须拥有它。

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