Ich benutze Firebase und habe eine Anmelde-/Login-Aktivität, die einwandfrei funktioniert, aber ich möchte auch, dass jeder Benutzer einen Benutzernamen aktualisiert. Es scheint, dass ich nicht laufen kann:
firebaseRef.getAuth().getUid()
Ich erhalte eine Fehlermeldung im App-Emulator "Die App wurde leider gestoppt".
Das sieht nach dem Hauptfehler aus, den ich in Android Studio auf dem Monitor bekomme: Etwas mit dem getUid () zu tun.
Java.lang.NullPointerException: Versuch, die virtuelle Methode 'Java.lang.String com.firebase.client.AuthData.getUid ()' für einen Objektreferenzwert aufzurufen
Hier ist mein Aktivitätscode:
package me.netsync.netconnect;
import Android.app.ActionBar;
import Android.content.Intent;
import Android.support.v7.app.AlertDialog;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.Menu;
import Android.view.MenuItem;
import Android.view.View;
import Android.widget.Button;
import Android.widget.EditText;
import com.firebase.client.AuthData;
import com.firebase.client.Firebase;
public class SettingActivity extends AppCompatActivity {
private Firebase mRef;
private Button BtnSettings;
private EditText TxtUsername;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setting);
mRef = new Firebase(Constants.FIREBASE_URL);
BtnSettings = (Button)findViewById(R.id.BtnSettings);
BtnSettings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// username txt update the profile
TxtUsername = (EditText)findViewById(R.id.TxtUsername);
String TxtUsernameStr = TxtUsername.getText().toString();
TxtUsernameStr = TxtUsernameStr.trim();
// check we can get a userid
/* if(mRef.getAuth() == null){
Intent intent = new Intent(SettingActivity.this,LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}*/
if(TxtUsernameStr.isEmpty()){
// show a dialog box
AlertDialog.Builder builder = new AlertDialog.Builder(SettingActivity.this);
builder.setMessage("Please make sure you enter a Username" + TxtUsernameStr)
.setTitle("Error!")
.setPositiveButton(Android.R.string.ok, null);
AlertDialog dialog = builder.create();
dialog.show();
}else{
Firebase upDateUserProfile = new Firebase(Constants.FIREBASE_URL);
String uid = upDateUserProfile.getAuth().getUid();
User user = new User(TxtUsernameStr);
upDateUserProfile.child("users").child(uid).child("username").setValue(user);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item){
int btn = item.getItemId();
if(btn == R.id.action_logout){
mRef.unauth();
Intent intent = new Intent(this,LoginActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
if(btn == R.id.action_settings){
mRef.unauth();
Intent intent = new Intent(this,SettingActivity.class);
startActivity(intent);
}
return true;
}
}
Alle Hinweise haben es zu schätzen gewusst.
Fügen Sie dies in Ihrer App build.gradle zu Ihren Abhängigkeiten hinzu
kompilieren "com.google.firebase: firebase-auth: 9.4.0"
import com.google.firebase.auth.FirebaseAuth;
...
...
if (FirebaseAuth.getInstance().getCurrentUser() == null) {
//Go to login
}
else{
String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
}
Sie müssen AuthStateListener hinzufügen.
mAuth=FirebaseAuth.getInstance();
mAuthListener=new FirebaseAuth.AuthStateListener() {
@Override
public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
if(firebaseAuth.getCurrentUser()==null){
//Your action here
}
}
};
FirebaseAuth.getInstance().getUid();
Diese API scheint in Firebase 12.0.0 entfernt worden zu sein
Verwenden Sie stattdessen diese FirebaseAuth.getInstance().getCurrentUser().getUid();
mit der entsprechenden Nullprüfung oder verwenden Sie Firebase 12.0.1, wo ich jetzt @Hide Annotation habe
Fügen Sie dies nach der Klasse Hauptaktivität hinzu
Firebase firebaseAuth;
DatabaseReference reference;
Füge irgendwo in onCreate hinzu
String usern;
usern = firebaseAuth.getInstance().getCurrentUser().getUid();
Laden Sie sie zu Firebase für ihre jeweiligen Kinder hoch
reference=FirebaseDatabase.getInstance()
.getReference().child("Patients")
.child("Patient" + usern).child("Pres");