Ich versuche, die ID des angemeldeten Benutzers zu erhalten und es in zwei Fragmente zu verwenden. In dem Fragment, das ich zuerst benutze, wird die ID in meiner globalen Variable korrekt abgerufen und gespeichert, aber wenn ich danach auf das andere Fragment zugreife, stürzt meine App ab und sagt, dass getUid() eine Nullzeiger-Ausnahme in der anderen Aktivität generiert.DatabaseException bei Verwendung von getUid() - Funktion in Firebase-Authentifizierung
Hier ist mein Code (Beide Fragmente mit Ausnahme identisch Codes für unterschiedliche Variablennamen. LDQApp ist meine Klasse für globale Variablen)
public class RecruitmentFragment extends Fragment {
private DatabaseReference mDatabase;
EditText name_text,reg_text,year_txt, mob_txt,interest_txt;
Button button;
public RecruitmentFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_recruitment, container, false);
name_text = (EditText)rootView.findViewById(R.id.editText2);
reg_text = (EditText)rootView.findViewById(R.id.editText3);
year_txt = (EditText)rootView.findViewById(R.id.editText4);
mob_txt = (EditText)rootView.findViewById(R.id.editText5);
interest_txt = (EditText)rootView.findViewById(R.id.editText6);
button = (Button)rootView.findViewById(R.id.button2);
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
mDatabase=FirebaseDatabase.getInstance().getReference("recruitment");
FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
LDQApp.uid = firebaseUser.getUid();
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
final String name,regNo,mobNo,interest;
int year;
name = name_text.getText().toString();
regNo = reg_text.getText().toString();
year = Integer.parseInt(year_txt.getText().toString());
mobNo = mob_txt.getText().toString();
interest = interest_txt.getText().toString();
RecruitUser recruitUser = new RecruitUser(name,regNo,year,mobNo,interest);
mDatabase.child(LDQApp.uid).setValue(recruitUser);
mDatabase.child(LDQApp.uid).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
RecruitUser sUser = dataSnapshot.getValue(RecruitUser.class);
Toast.makeText(getContext(),"Submitted successfully",Toast.LENGTH_SHORT).show();
Log.d(TAG, "User name: " + name + ", Registration No: " + regNo);
}
@Override
public void onCancelled(DatabaseError error) {
// Failed to read value
Log.w(TAG, "Failed to read value.", error.toException());
}
});
}
});
return rootView;
}
}
Dies ist das Protokoll als
angefordert
Sie sagten über 2 Aktivitäten und zwei Fragmente noch hier sehe ich nur ein Fragment und ich weiß nicht, es ist das erste oder nicht? Und kein Protokoll zur Verfügung gestellt wird? Wie können wir Ihnen eine Antwort geben? –
Eine kleine Änderung vorgenommen. Ich wollte nur 2 Fragmente schreiben. Ich habe auch geschrieben, dass das andere Fragment den gleichen Code mit Ausnahme einiger zusätzlicher Variablen hat. Das Fragment, auf das ich als zweites zugreife, zeigt die Ausnahme –
, wie Sie sagten, dass Sie in diesem Fragment einen Wert für 'LDQApp.uid = fireBaseUser.getUid();' haben und wenn Sie auf das zweite zugreifen, dessen ('LDQApp.uid') NULL habe ich recht? –