【问题标题】:how to save data fields to Firebase user input如何将数据字段保存到 Firebase 用户输入
【发布时间】:2018-04-14 02:02:31
【问题描述】:

我一直在尝试将用户输入的信息保存到 Firebase,但我的应用程序已停止并崩溃。我创建了一个类,它将采用我已声明的变量的 Getter 方法,我试图更改如何保存值,但没有任何东西被证明是有效的。 MainActivity.java

  }
    });
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DoctorReg();
        }
    });
    }

  private void DoctorReg()
  {
      String name=text.getText().toString().trim();
      String lname=text1.getText().toString().trim();
      String sex=s.getSelectedItem().toString();
      String username=text2.getText().toString().trim();
      String password=text3.getText().toString().trim();
      String email=text4.getText().toString().trim();
      String pnum=text5.getText().toString().trim();
      String padd=text6.getText().toString().trim();
      String province=s1.getSelectedItem().toString();
      String speciality=s2.getSelectedItem().toString();
      if(!TextUtils.isEmpty(name))
      {
          String id=databaseReference.push().getKey();
          DoctorReg doctorReg= new DoctorReg(id,name,lname,sex,username,password,email,pnum,padd,province,speciality);
          databaseReference.child(id).setValue(doctorReg);
          Toast.makeText(this, "Patient is Added ",Toast.LENGTH_LONG).show();
      }
      else
      {
          Toast.makeText(this, "You should Enter a Name ",Toast.LENGTH_LONG).show();
      }

  }

DocRegistration.java

public final class DoctorReg {
String Doctor_Id,F_Name,L_Name,Sex,Username_Doc,Password_Doc,Email_Doc,PNum_Doc,Postal_Address_Doc,Province_Doc,Speciality;
public DoctorReg(){}

public DoctorReg(String doctor_Id, String f_Name, String l_Name, String sex, String username_Doc, String password_Doc, String email_Doc, String PNum_Doc, String postal_Address_Doc, String province_Doc, String speciality) {
    this.Doctor_Id = doctor_Id;
    this.F_Name = f_Name;
    this.L_Name = l_Name;
    this.Sex = sex;
    this.Username_Doc = username_Doc;
    this.Password_Doc = password_Doc;
    Email_Doc = email_Doc;
    this.PNum_Doc = PNum_Doc;
    this.Postal_Address_Doc = postal_Address_Doc;
    this.Province_Doc = province_Doc;
    this.Speciality = speciality;
}

public String getDoctor_Id() {
    return Doctor_Id;
}

public String getF_Name() {
    return F_Name;
}

public String getL_Name() {
    return L_Name;
}

public String getSex() {
    return Sex;
}

public String getUsername_Doc() {
    return Username_Doc;
}

public String getPassword_Doc() {
    return Password_Doc;
}

public String getEmail_Doc() {
    return Email_Doc;
}

public String getPNum_Doc() {
    return PNum_Doc;
}

public String getPostal_Address_Doc() {
    return Postal_Address_Doc;
}

public String getProvince_Doc() {
    return Province_Doc;
}

public String getSpeciality() {
    return Speciality;
}

LogCat

04-13 22:27:26.356 7323-7323/? E/AndroidRuntime: FATAL EXCEPTION: main
                                             Process: com.example.remy_stolz.myapplication, PID: 7323
                                             com.google.firebase.database.DatabaseException: Found two getters or fields with conflicting case sensitivity for property: doctor_id
                                                 at com.google.android.gms.internal.zh.zzhe(Unknown Source)
                                                 at com.google.android.gms.internal.zh.<init>(Unknown Source)
                                                 at com.google.android.gms.internal.zg.zzf(Unknown Source)
                                                 at com.google.android.gms.internal.zg.zzao(Unknown Source)
                                                 at com.google.android.gms.internal.zg.zzan(Unknown Source)
                                                 at com.google.firebase.database.DatabaseReference.zza(Unknown Source)
                                                 at com.google.firebase.database.DatabaseReference.setValue(Unknown Source)
                                                 at com.example.remy_stolz.myapplication.DocRegistrationActivity.DoctorReg(DocRegistrationActivity.java:120)
                                                 at com.example.remy_stolz.myapplication.DocRegistrationActivity$5.onClick(DocRegistrationActivity.java:99)
                                                 at android.view.View.performClick(View.java:5198)
                                                 at android.view.View$PerformClick.run(View.java:21147)
                                                 at android.os.Handler.handleCallback(Handler.java:739)
                                                 at android.os.Handler.dispatchMessage(Handler.java:95)
                                                 at android.os.Looper.loop(Looper.java:148)
                                                 at android.app.ActivityThread.main(ActivityThread.java:5417)
                                                 at java.lang.reflect.Method.invoke(Native Method)
                                                 at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                 at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

04-13 22:27:26

【问题讨论】:

  • 如果我错了,请原谅我,我的猜测是 firebase 正在尝试创建一个名称相同但大小写不同的新列

标签: android firebase firebase-realtime-database user-input


【解决方案1】:

遵循正确的java命名约定,这将通过解决冲突来帮助您解决这个问题,并且也将避免一些其他错误。另外

  1. 对于类,使用UpperCamelCase.
  2. 对于类成员和局部变量,使用lowerCamelCase
  3. 对于包,使用反向 URI,例如org.acme.project.subsystem
  4. 对于常量,使用ALL_CAPS.

【讨论】:

    【解决方案2】:

    Firebase 可能发现 getter 方法 getDoctor_Id() 与成员变量 Doctor_Id 冲突。

    所以,要么改变你的成员变量的大小写,让类看起来像这样,因此不再冲突:

    public final class DoctorReg(){
    
        String doctor_Id;
        //The rest of your member variables here.
    
        public DoctorReg() {}
    
        public DoctorReg(String doctor_Id){
            this.doctor_Id = doctor_Id;
        }
    
        public String getDoctor_Id(){
            return doctor_Id;
        }
    
        //The rest of your getter methods below.
    
    }
    

    或者,尝试将您的成员变量 Doctor_Id 设为私有。由于您没有在原始类中指定访问修饰符,因此它默认为包私有。

    【讨论】:

    • 让我试试吧
    • @RemmieSithole 所以你将String Doctor_Id 更改为String doctor_Id,并保持getter 方法相同,使用大写变量名,但那不起作用?
    • 它仍然产生同样的错误......如果不识别我的方法 DocReg();那里有什么错误
    • @RemmieSithole 它在​​哪里无法识别您的方法?另外,尝试将您的课程恢复原状,并将变量设置为私有。
    • 在 com.google.firebase.database.DatabaseReference.setValue(Unknown Source)...那里
    猜你喜欢
    • 1970-01-01
    • 2020-11-05
    • 2014-06-22
    • 2012-04-02
    • 2021-09-03
    • 2017-05-21
    • 2015-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多