Android dataSnapshot函数不工作-函数调用时应用程序崩溃

Android dataSnapshot函数不工作-函数调用时应用程序崩溃,android,firebase,android-studio,firebase-realtime-database,google-cloud-functions,Android,Firebase,Android Studio,Firebase Realtime Database,Google Cloud Functions,我正在尝试使用firebase实时数据库登录,其中存储了我的用户名和密码。当我输入错误的用户名时,我得到了错误。但当我输入正确的凭据并点击登录时,应用程序崩溃。我不知道我哪里做错了,请帮我解决这个问题。提前多谢 firebase数据库屏幕截图 Android XML <ImageView android:id="@+id/login_img" android:layout_width="320dp" android:

我正在尝试使用firebase实时数据库登录,其中存储了我的用户名和密码。当我输入错误的用户名时,我得到了错误。但当我输入正确的凭据并点击登录时,应用程序崩溃。我不知道我哪里做错了,请帮我解决这个问题。提前多谢

  • firebase数据库屏幕截图
  • Android XML

     <ImageView
         android:id="@+id/login_img"
         android:layout_width="320dp"
         android:layout_height="186dp"
         android:layout_gravity="center"
         android:contentDescription="@string/login_img"
         android:src="@drawable/login" />
    
     <TextView
         android:id="@+id/h_login"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Hello there, welcome back"
         android:textAllCaps="true"
         android:textColor="@color/colorPrimary"
         android:textSize="32sp"
         android:textStyle="bold"
         app:fontFamily="@font/roboto_bold" />
    
     <TextView
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text="Login to continue"
         android:textColor="@color/colorPrimaryMid"
         android:textSize="24sp"
         android:layout_marginTop="5dp"
         android:layout_marginBottom="10dp"/>
    
     <com.google.android.material.textfield.TextInputLayout
         android:id="@+id/username"
         style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="Username"
         android:layout_marginBottom="10dp">
    
         <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/edtUsername"
             android:layout_width="match_parent"
             android:layout_height="wrap_content" />
    
     </com.google.android.material.textfield.TextInputLayout>
    
     <com.google.android.material.textfield.TextInputLayout
         android:id="@+id/password"
         style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         app:passwordToggleEnabled="true"
         android:hint="Password"
         android:layout_marginBottom="10dp">
    
         <com.google.android.material.textfield.TextInputEditText
             android:id="@+id/edtPassword"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:inputType="textPassword" />
    
     </com.google.android.material.textfield.TextInputLayout>
    
     <Button
         android:id="@+id/forgot_pass"
         android:layout_width="200dp"
         android:layout_height="wrap_content"
         android:layout_gravity="end"
         android:layout_marginBottom="10dp"
         android:background="#00FFFFFF"
         android:elevation="0dp"
         android:freezesText="false"
         android:text="Forget Password?" />
    
     <Button
         android:id="@+id/login_btn"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="@color/colorPrimary"
         android:padding="10dp"
         android:text="Login"
         android:textColor="@color/colorPrimaryLight"
         android:onClick="loginUser"/>
    
     <Button
         android:id="@+id/reg_btn"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:background="#00FFFFFF"
         android:padding="10dp"
         android:text="New user Register here."
         android:textColor="@color/colorSecondaryDark"
         android:onClick="regUser"/>
    

  • 错误日志

  • 这是你的主题的答案

    dataSnapshot.child(userEnteredUsername).child("password").getValue().toString()
    

    我想你的datasnapshot中有一个长值,你想把它作为一个字符串,你有保存的长值吗?@taki eddine,请找到DB的屏幕截图。您可以尝试使用dataSnapshot.child(userEnteredUsername).child(“密码”).getValue().toString()代替字符串吗。class@taki埃丁,非常感谢。你救了我一天。请解释是什么问题。为什么它以前不起作用。再次感谢您的帮助。原因是您使用了string.class而不是tostring(),tostring就像一个转换器,它会将您的值转换为字符串
    2020-07-18 19:16:12.864 7246-7246/com.example.d1 E/AndroidRuntime: FATAL EXCEPTION: main
        Process: com.example.d1, PID: 7246
        com.google.firebase.database.DatabaseException: Failed to convert value of type java.lang.Long to String
            at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertString(com.google.firebase:firebase-database@@19.3.0:425)
            at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.deserializeToClass(com.google.firebase:firebase-database@@19.3.0:216)
            at com.google.firebase.database.core.utilities.encoding.CustomClassMapper.convertToCustomClass(com.google.firebase:firebase-database@@19.3.0:79)
            at com.google.firebase.database.DataSnapshot.getValue(com.google.firebase:firebase-database@@19.3.0:203)
            at com.example.d1.login$1.onDataChange(login.java:79)
            at com.google.firebase.database.Query$1.onDataChange(com.google.firebase:firebase-database@@19.3.0:179)
            at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.3.0:75)
            at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.3.0:63)
            at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.3.0:55)
            at android.os.Handler.handleCallback(Handler.java:790)
            at android.os.Handler.dispatchMessage(Handler.java:99)
            at android.os.Looper.loop(Looper.java:164)
            at android.app.ActivityThread.main(ActivityThread.java:6494)
            at java.lang.reflect.Method.invoke(Native Method)
            at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
    
    dataSnapshot.child(userEnteredUsername).child("password").getValue().toString()