致命例外:main com.firebase.client.firebaseexception:未能在com.fireb



我一直在研究Android应用程序以进行本地化。该数据库连接到Firebase,以实时跟踪用户。在实施注册表格时,我经历了此错误,但我永远无法摆脱它。每当我尝试注册为学生或老师时,申请崩溃。我提到了这一点,但也没有帮助我。这是我的代码

package com.example.appla.iattended;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import com.firebase.client.Firebase;

public class SignUpActivity extends AppCompatActivity {
    EditText email, password,id, confirmPassword;
    String str_email, str_password,str_id, str_confirmPassword;
    Boolean email_verified, password_verified, isTA, id_verified;
    Firebase ref = new Firebase("https://yattend-755ad.firebaseio.com/");
    Button signUp;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        Firebase.setAndroidContext(this);
        email = (EditText)  findViewById(R.id.txt_signup_email);
        password = (EditText)  findViewById(R.id.txt_signup_password);
        confirmPassword = (EditText)  findViewById(R.id.txt_signup_confirm_password);
        id = (EditText)  findViewById(R.id.txt_signup_id);
        email.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    email.setHint("");
                else
                    email.setHint("GUC email");
            }
        });
        password.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    password.setHint("");
                else
                    password.setHint("Password");
            }
        });
        confirmPassword.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    confirmPassword.setHint("");
                else
                    confirmPassword.setHint("Confirm Password");
            }
        });
        id.setOnFocusChangeListener(new View.OnFocusChangeListener() {
            public void onFocusChange(View v, boolean hasFocus) {
                if (hasFocus)
                    id.setHint("");
                else
                    id.setHint("XX-XXXXX");
            }
        });
        signUp = (Button) findViewById(R.id.btn_login);
        signUp.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //generate strings
                str_email = email.getText().toString();
                str_password = password.getText().toString();
                str_confirmPassword = confirmPassword.getText().toString();
                str_id = id.getText().toString();
               //checking password
                if(str_password.equals(str_confirmPassword)){
                    password_verified = true;
                }else{
                    password_verified = false;
                    Toast.makeText(SignUpActivity.this,
                            "Passwords do not match, please try again.", Toast.LENGTH_LONG).show();
                }
                //checking email
                if(str_email.endsWith("@student.guc.edu.eg")){
                    email_verified = true;
                    isTA =false;
                }else if(str_email.endsWith("@guc.edu.eg")) {
                    email_verified = true;
                    isTA=true;
                }else{
                    email_verified = false;
                    Toast.makeText(SignUpActivity.this,
                        "Incorrect Email. Please use your GUC email.", Toast.LENGTH_LONG).show();
                }
                //checking id
                if(str_id.contains("-") && str_id.length() > 4){
                    id_verified =true;
                }else if (str_id.equals("") && isTA) {
                    id_verified = true;
                } else{
                        id_verified =false;
                        Toast.makeText(SignUpActivity.this,
                            "Please insert GUC ID or if TA, leave blank.", Toast.LENGTH_LONG).show();
                    }

                //To firebase
                if(email_verified && password_verified && id_verified){
                    //Insert
                    User user = new User(str_email,str_password,str_id,isTA);
                    Firebase newRef = ref.child("Users").push();
                    newRef.setValue(user);
                    if(isTA){
                        //Redirect to TA's page
                        Intent myIntent = new Intent(SignUpActivity.this, StartSessionActivity.class);
                        SignUpActivity.this.startActivity(myIntent);
                    }else{
                        //Redirect to students page
                        Intent myIntent = new Intent(SignUpActivity.this, StudentActivity.class);
                        SignUpActivity.this.startActivity(myIntent);
                    }
                }
            }
        });

    }
}

这是用户类:

package com.example.appla.iattended;

public class User {
     String email, password,id;
     Boolean isTa;
    public User(String email, String password, String id,Boolean isTa){
        this.email=email;
        this.password=password;
        this.id=id;
        this.isTa=isTa;
    }
}

,每当我按下按钮寄存器

时,这是我生成的日志
FATAL EXCEPTION: main
                                                                           com.firebase.client.FirebaseException: Failed to parse to snapshot
                                                                               at com.firebase.client.Firebase.setValueInternal(Firebase.java:347)
                                                                               at com.firebase.client.Firebase.setValue(Firebase.java:238)
                                                                               at com.example.appla.iattended.SignUpActivity$5.onClick(SignUpActivity.java:122)
                                                                               at android.view.View.performClick(View.java:4211)
                                                                               at android.view.View$PerformClick.run(View.java:17267)
                                                                               at android.os.Handler.handleCallback(Handler.java:615)
                                                                               at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                               at android.os.Looper.loop(Looper.java:137)
                                                                               at android.app.ActivityThread.main(ActivityThread.java:4898)
                                                                               at java.lang.reflect.Method.invokeNative(Native Method)
                                                                               at java.lang.reflect.Method.invoke(Method.java:511)
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
                                                                               at dalvik.system.NativeStart.main(Native Method)
                                                                            Caused by: java.lang.IllegalArgumentException: No serializer found for class com.example.appla.iattended.User and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
                                                                               at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2615)
                                                                               at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542)
                                                                               at com.firebase.client.Firebase.setValueInternal(Firebase.java:336)
                                                                               at com.firebase.client.Firebase.setValue(Firebase.java:238) 
                                                                               at com.example.appla.iattended.SignUpActivity$5.onClick(SignUpActivity.java:122) 
                                                                               at android.view.View.performClick(View.java:4211) 
                                                                               at android.view.View$PerformClick.run(View.java:17267) 
                                                                               at android.os.Handler.handleCallback(Handler.java:615) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:92) 
                                                                               at android.os.Looper.loop(Looper.java:137) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:4898) 
                                                                               at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                               at java.lang.reflect.Method.invoke(Method.java:511) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
                                                                               at dalvik.system.NativeStart.main(Native Method) 
                                                                            Caused by: com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.example.appla.iattended.User and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )
                                                                               at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.failForEmpty(UnknownSerializer.java:59)
                                                                               at com.fasterxml.jackson.databind.ser.impl.UnknownSerializer.serialize(UnknownSerializer.java:26)
                                                                               at com.fasterxml.jackson.databind.ser.DefaultSerializerProvider.serializeValue(DefaultSerializerProvider.java:118)
                                                                               at com.fasterxml.jackson.databind.ObjectMapper._convert(ObjectMapper.java:2593)
                                                                               at com.fasterxml.jackson.databind.ObjectMapper.convertValue(ObjectMapper.java:2542) 
                                                                               at com.firebase.client.Firebase.setValueInternal(Firebase.java:336) 
                                                                               at com.firebase.client.Firebase.setValue(Firebase.java:238) 
                                                                               at com.example.appla.iattended.SignUpActivity$5.onClick(SignUpActivity.java:122) 
                                                                               at android.view.View.performClick(View.java:4211) 
                                                                               at android.view.View$PerformClick.run(View.java:17267) 
                                                                               at android.os.Handler.handleCallback(Handler.java:615) 
                                                                               at android.os.Handler.dispatchMessage(Handler.java:92) 
                                                                               at android.os.Looper.loop(Looper.java:137) 
                                                                               at android.app.ActivityThread.main(ActivityThread.java:4898) 
                                                                               at java.lang.reflect.Method.invokeNative(Native Method) 
                                                                               at java.lang.reflect.Method.invoke(Method.java:511) 
                                                                               at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006) 
                                                                               at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773) 
                                                                               at dalvik.system.NativeStart.main(Native Method) 

我对此不太确定,因为您正在使用Firebase的遗留版本的错误消息。因此,首先,我建议如果是这样,请查看迁移说明。

firebase的当前版本显示了用于读写和写入数据库的类的预期结构:

@IgnoreExtraProperties
public class User {
    public String username;
    public String email;
    public User() {
        // Default constructor required for calls to DataSnapshot.getValue(User.class)
    }
    public User(String username, String email) {
        this.username = username;
        this.email = email;
    }
}

我不确定这是如何转化为较旧版本的,但是您可能希望尝试包括空构造函数并将您的字段公开。

没有发现的属性... empty_bean

您的字段是包裹私有化的,您没有得到的。

添加一些Getter或将字段公开。


如果您打算使用getValue(User.class)

,您还需要添加一个空构造函数

相关内容

最新更新