webentwicklung-frage-antwort-db.com.de

Android Firebase - Benutzer-ID kann nicht mit getUid () abgerufen werden. Fehler: bei NULL-Objektreferenz

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. 

9
user3200080

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();
}
4
Apex

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

            }

        }
    };
1
Mohammed Javad

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

1
Marc D
  • 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");
    
0
RpzFreak