【问题标题】:Insert data to two tables in firebase using android使用android将数据插入firebase中的两个表
【发布时间】:2018-05-17 22:15:44
【问题描述】:

我是 Firebase 和 Android 的新手。我想在 Firebase 中有两张表,

  1. 通过注册用户,用户详情表格Users
  2. 通过注册指南,请表Guides了解指南详情

我正在使用两个类,一个用于用户,一个用于指南,以通过 getter 和 setter 获取和设置值。

我已经为两个按钮创建了两个 databaseReference 对象。 它与用户一起工作,但不与指南一起工作。当我单击指南按钮获取注册表时,它显示 不幸的是导游已停止。 并返回第一页。

我认为是因为 API,我首先将目标 Android API 级别设置为 27,然后我在 Android API 级别 22 上运行,所以将其设置为 API 级别 22 并再次弹出错误。

有人可以帮我吗?

这是我的代码,

Guides.java

public class Guides {

String guideName;
String guidePhoneNo;
String guideLanguages;
String guideMail;
String guidePwd;

public Guides(){

}

public Guides(String guideName,String guidePhoneNo,String guideLanguages,String guideMail, String guidePwd){
    guideName=guideName;
    guidePhoneNo=guidePhoneNo;
    guideLanguages=guideLanguages;
    guideMail=guideMail;
    guidePwd=guidePwd;
}

public String getGuideName() {
    return guideName;
}

public void setGuideName(String guideName) {
    this.guideName = guideName;
}

public String getGuidePhoneNo() {
    return guidePhoneNo;
}

public void setGuidePhoneNo(String guidePhoneNo) {
    this.guidePhoneNo = guidePhoneNo;
}

public String getGuideLanguages() {
    return guideLanguages;
}

public void setGuideLanguages(String guideLanguages) {
    this.guideLanguages = guideLanguages;
}

public String getGuideMail() {
    return guideMail;
}

public void setGuideMail(String guideMail) {
    this.guideMail = guideMail;
}

public String getGuidePwd() {
    return guidePwd;
}

public void setGuidePwd(String guidePwd) {
    this.guidePwd = guidePwd;
}}

GuideRegActivity.java

public class GuideRegActivity extends AppCompatActivity {

EditText guideName,guidePhoneNo,guideLanguages,guideMail,guidePwd;
Button btnGuideReg;
FirebaseDatabase FirebaseDatabase;
DatabaseReference databseReference1;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_guide_reg);

    guideName=(EditText)findViewById(R.id.guideName);
    guidePhoneNo=(EditText)findViewById(R.id.guidePhoneNo);
    guideLanguages=(EditText)findViewById(R.id.guideLanguages);
    guideMail=(EditText)findViewById(R.id.guideMail);
    guidePwd=(EditText)findViewById(R.id.guidePwd);

    FirebaseDatabase.getInstance().setPersistenceEnabled(true);

    databseReference1 = FirebaseDatabase.getInstance().getReference("Guides");

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

}

private void addArrayList() {
    String gName= guideName.getText().toString().trim();
    String gPNo=guidePhoneNo.getText().toString().trim();
    String gLang=guideLanguages.getText().toString().trim();
    String gMail=guideMail.getText().toString().trim();
    String gPwd=guidePwd.getText().toString().trim();

    if(TextUtils.isEmpty(gName)){
        Toast.makeText(this,"Please Enter Guide Name",Toast.LENGTH_LONG).show();
    }else if(TextUtils.isEmpty(gPNo)){
        Toast.makeText(this,"Please Enter Contact No",Toast.LENGTH_LONG).show();
    }else if(TextUtils.isEmpty(gLang)){
        Toast.makeText(this,"Please Enter Languages You can",Toast.LENGTH_LONG).show();
    }else if(TextUtils.isEmpty(gMail)){
        Toast.makeText(this,"Please Enter Your E Mail",Toast.LENGTH_LONG).show();
    }else if(TextUtils.isEmpty(gPwd)){
        Toast.makeText(this,"Please Enter Password",Toast.LENGTH_LONG).show();
    }else{
        String id =databseReference1.push().getKey();
        Guides guides = new Guides(gName,gPNo,gLang,gMail,gPwd);
        databseReference1.child(id).child("Guide Name").setValue(gName.toString());
        databseReference1.child(id).child("Contact No").setValue(gPNo.toString());
        databseReference1.child(id).child("Vehicle Type").setValue(gName.toString());
        databseReference1.child(id).child("Mail").setValue(gPNo.toString());
        databseReference1.child(id).child("Password").setValue(gPwd.toString());
        Toast.makeText(this,"Guide Added",Toast.LENGTH_LONG).show();
        ClearText();
    }
}

private void ClearText() {
    guideName.setText("");
    guideLanguages.setText("");
    guidePwd.setText("");
    guideMail.setText("");
    guidePhoneNo.setText("");

}}

Users.java

public class Users {

String userName;
String userMail;
String userPwd;

public Users(){

}

public Users(String userName , String userMail,String userPwd){
    userName=userName;
    userMail=userMail;
    userPwd=userPwd;

}

public String getUserName() {
    return userName;
}

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

public String getUserMail() {
    return userMail;
}

public void setUserMail(String userMail) {
    this.userMail = userMail;
}

public String getUserPwd() {
    return userPwd;
}

public void setUserPwd(String userPwd) {
    this.userPwd = userPwd;
}}

UserRegActivity.java

public class UserRegActivity extends AppCompatActivity {

EditText userName,userMail,userPwd;
Button btnRegUser;
FirebaseDatabase FirebaseDatabase;
DatabaseReference databseReference;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_user_reg);

    userName=(EditText)findViewById(R.id.userName);
    userMail=(EditText)findViewById(R.id.userMail);
    userPwd=(EditText)findViewById(R.id.userPwd);
    btnRegUser=(Button)findViewById(R.id.btnUserReg);

    FirebaseDatabase.getInstance().setPersistenceEnabled(true);

    databseReference = FirebaseDatabase.getInstance().getReference("Users");

    btnRegUser.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            addArrayList();

        }
    });
}

private void addArrayList() {
    String uName= userName.getText().toString().trim();
    String uMail=userMail.getText().toString().trim();
    String uPwd=userPwd.getText().toString().trim();

    if(TextUtils.isEmpty(uName)){
        Toast.makeText(this,"Please Enter User Name",Toast.LENGTH_LONG).show();
    }else if(TextUtils.isEmpty(uMail)){
        Toast.makeText(this,"Please Enter Your Mail",Toast.LENGTH_LONG).show();
    }else if(TextUtils.isEmpty(uPwd)){
        Toast.makeText(this,"Please Enter Password",Toast.LENGTH_LONG).show();
    }else{
        String id =databseReference.push().getKey();
        Users users = new Users(uName,uMail,uPwd);
        databseReference.child(id).child("UserName").setValue(uName.toString());
        databseReference.child(id).child("Email").setValue(uMail.toString());
        databseReference.child(id).child("Password").setValue(uPwd.toString());
        Toast.makeText(this,"User Added",Toast.LENGTH_LONG).show();
        ClearText();
    }
}
private void ClearText(){
    userName.setText("");
    userMail.setText("");
    userPwd.setText("");
}}

上传: 我当前的数据库结构, here Only Users will get

这是我的错误日志,

05-17 19:39:56.489 20503-20503/com.example.hansi.tourguide E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.hansi.tourguide, PID: 20503
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.hansi.tourguide/com.example.hansi.tourguide.GuideRegActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2695)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769)
    at android.app.ActivityThread.access$900(ActivityThread.java:177)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5910)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.Button.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
    at com.example.hansi.tourguide.GuideRegActivity.onCreate(GuideRegActivity.java:36)
    at android.app.Activity.performCreate(Activity.java:6178)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2648)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2769) 
    at android.app.ActivityThread.access$900(ActivityThread.java:177) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1430) 
    at android.os.Handler.dispatchMessage(Handler.java:102) 
    at android.os.Looper.loop(Looper.java:135) 
    at android.app.ActivityThread.main(ActivityThread.java:5910) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:372) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1405) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1200) 

【问题讨论】:

  • 您能出示您的代码吗?

标签: android firebase firebase-realtime-database


【解决方案1】:

我不确定,但我在 android 中定期使用 firebase 大约一个月,我认为你应该使用单个 Databae Reference,然后你可以对不同的表使用两个查询

【讨论】:

  • 确保 Guides 和 Users 类中的所有变量都是公开的
【解决方案2】:

Firebase 数据库不是关系数据库,因此表、列和行的概念在这里不适用。它是以 Json 格式发送数据的 NoSQL 数据库。

【讨论】:

  • 那么如何分别以UsersGuides 插入数据?
猜你喜欢
  • 1970-01-01
  • 2014-01-31
  • 2013-04-26
  • 2023-03-04
  • 1970-01-01
  • 2018-05-17
  • 2016-12-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多