Вставить данные в две таблицы в FireBase с помощью Android - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в Firebase и Android.Я хочу иметь две таблицы в Firebase,

  1. При регистрации пользователя, таблица для сведений о пользователе Users
  2. При регистрации руководств таблица Guides для сведений о руководстве

Я использую два класса, один для пользователя и один для направляющих, чтобы получать и устанавливать значения через методы получения и установки.

Я уже создал два объекта databaseReference для двух кнопок.Он работает с пользователями, но не с руководствами.Когда я нажимаю кнопку гида, чтобы получить регистрационную форму, она отображает К сожалению, гид перестал работать. и вернулась на первую страницу.

Я подумал, что из-за API, во-первых, я установил целевой API-уровень Android на 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("");
}}

Загрузить: моя текущая структура базы данных, здесь Только пользователи получат

и вот мой журнал ошибок

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) 

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

База данных Firebase не является реляционной базой данных, поэтому концепция таблиц, столбцов и строк здесь не применима. Это база данных NoSQL, которая отправляет данные в формате Json.

0 голосов
/ 16 мая 2018

Я не уверен, но я использовал Firebase около месяца регулярно в Android, я думаю, что вы должны использовать одну ссылку Databae, а затем вы можете использовать два запроса для разных таблиц

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...