2017-03-29 5 views
0

ich eine Störung erhalte, wenn ich versuche, die App zu laufen:initialisieren Firebase Auth Objektfehler

ist hier .java- Klasse:

package com.safariagaming.flix; 


import android.app.ProgressDialog; 
import android.support.annotation.NonNull; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.text.TextUtils; 
import android.view.View; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.Toast; 

import com.google.android.gms.tasks.OnCompleteListener; 
import com.google.android.gms.tasks.Task; 
import com.google.firebase.auth.AuthResult; 
import com.google.firebase.auth.FirebaseAuth; 

public class SignUpScreen extends AppCompatActivity implements View.OnClickListener{ 

    //defining view objects 
    private EditText editTextEmail; 
    private EditText editTextPassword; 
    private Button buttonSignup; 
    private ProgressDialog progressDialog; 


    //defining firebaseauth object 
    private FirebaseAuth firebaseAuth; 

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

     //initializing firebase auth object 
     firebaseAuth = FirebaseAuth.getInstance(); 


     //initializing views 
     editTextEmail = (EditText) findViewById(R.id.editTextEmail); 
     editTextPassword = (EditText) findViewById(R.id.editTextPassword); 

     buttonSignup = (Button) findViewById(R.id.buttonSignup); 

     progressDialog = new ProgressDialog(this); 

     //attaching listener to button 
     buttonSignup.setOnClickListener(this); 
    } 

    private void registerUser(){ 

     //getting email and password from edit texts 
     String email = editTextEmail.getText().toString().trim(); 
     String password = editTextPassword.getText().toString().trim(); 

     //checking if email and passwords are empty 
     if(TextUtils.isEmpty(email)){ 
      Toast.makeText(this,"Please enter email",Toast.LENGTH_LONG).show(); 
      return; 
     } 

     if(TextUtils.isEmpty(password)){ 
      Toast.makeText(this,"Please enter password",Toast.LENGTH_LONG).show(); 
      return; 
     } 

     //if the email and password are not empty 
     //displaying a progress dialog 

     progressDialog.setMessage("Registering Please Wait..."); 

     //creating a new user 
     firebaseAuth.createUserWithEmailAndPassword(email, password) 
       .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 
         //checking if success 
         if(task.isSuccessful()){ 
          //display some message here 
          Toast.makeText(SignUpScreen.this,"Successfully registered",Toast.LENGTH_LONG).show(); 
         }else{ 
          //display some message here 
          Toast.makeText(SignUpScreen.this,"Registration Error",Toast.LENGTH_LONG).show(); 
         } 
         progressDialog.dismiss(); 
        } 
       }); 

    } 

    @Override 
    public void onClick(View view) { 
     //calling register method on click 
     registerUser(); 
    } 
} 

(Ich denke, dass der Fehler passiert, weil ich nicht initialisiert Feuerbasis auth Objekt korrekt)

Hier ist meine XML-Klasse

android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
> 

<LinearLayout 
    android:layout_centerVertical="true" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical"> 

    <EditText 
     android:id="@+id/editTextEmail" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="15dp" 
     android:hint="Enter email" 
     android:inputType="textEmailAddress" /> 

    <EditText 
     android:id="@+id/editTextPassword" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="15dp" 
     android:hint="Enter password" 
     android:inputType="textPassword" /> 

    <Button 
     android:id="@+id/buttonSignup" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_margin="15dp" 
     android:text="Signup" /> 

</LinearLayout> 

Hier ist meine Fehlermeldung, die ich

03-29 18:14:49.700 9230-9230/com.safariagaming.flix E/AndroidRuntime: FATAL EXCEPTION: main 
                    Process: com.safariagaming.flix, PID: 9230 
                    java.lang.NullPointerException: Attempt to invoke virtual method 'com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword(java.lang.String, java.lang.String)' on a null object reference 
                     at com.safariagaming.flix.SignUpScreen.registerUser(SignUpScreen.java:72) 
                     at com.safariagaming.flix.SignUpScreen.onClick(SignUpScreen.java:93) 
                     at android.view.View.performClick(View.java:5637) 
                     at android.view.View$PerformClick.run(View.java:22429) 
                     at android.os.Handler.handleCallback(Handler.java:751) 
                     at android.os.Handler.dispatchMessage(Handler.java:95) 
                     at android.os.Looper.loop(Looper.java:154) 
                     at android.app.ActivityThread.main(ActivityThread.java:6119) 
                     at java.lang.reflect.Method.invoke(Native Method) 
                     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 
+0

Suchen Sie in Ihrer Protokollausgabe nach einer Erklärung, warum Firebase Auth nicht ordnungsgemäß initialisiert wird. Wenn es nicht zu groß ist, posten Sie die Protokollausgabe für Ihre App-Initialisierung. –

+0

Fügen Sie eine if-Anweisung mit 'Log'-Anweisungen unmittelbar nach' firebaseAuth = FirebaseAuth.getInstance() 'hinzu, um zu bestätigen, dass der Code ausgeführt wird und' firebaseAuth' nicht null ist. –

+0

Es könnte ein paar Dinge passieren: Überprüfen Sie, ob 'FirebaseApp' korrekt initialisiert wird. Stellen Sie sicher, dass FirebaseApp # getApp() 'nicht null ist. Wenn nicht, wird 'FirebaseApp' nicht korrekt initialisiert und daher wird 'FirebaseAuth' nicht initialisiert. Der einzige andere Fall, in dem eine 'Null'-Rückgabe für' FirebaseAuth # getAuth' vorliegt, wird in mehreren Prozessen ausgeführt. 'FirebaseInitProvider' funktioniert nur für den 'Standard'-Prozess und nicht für andere Prozesse, wenn auf' ' android: process' in Ihrer 'AndroidManifest.xml' verwiesen wird. – Rahul

Antwort

0

Sie am stoßen sollten die Variablen definiert haben email und passwordaußerhalb das Verfahren registerUser(). Es scheint, dass Ihr Button nicht korrekt eingestellt ist.

package com.safariagaming.flix; 

/** 
* Imports... 
*/ 

public class SignUpScreen extends AppCompatActivity implements View.OnClickListener { 

    private String email = null; 
    private String password = null; 
    private FirebaseAuth.AuthStateListener mAuthListener; 

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

    /** 
    * Inits and code... 
    */ 

    // Signup button on listener 
    buttonSignup.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     email = editTextEmail.getText().toString().trim(); 
     password = editTextPassword.getText().toString().trim(); 

     // Verifications 
     if (TextUtils.isEmpty(email)) { 
      Toast.makeText(LoginActivity.this, R.string.empty_email, Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     if (!Patterns.EMAIL_ADDRESS.matcher(email).matches()) { 
      Toast.makeText(LoginActivity.this, R.string.wrong_email, Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     if (TextUtils.isEmpty(password)) { 
      Toast.makeText(LoginActivity.this, R.string.empty_password, Toast.LENGTH_SHORT).show(); 
     } 

     // Authenticating user 
     mAuth.createUserWithEmailAndPassword(email, password) 
       .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() { 
        @Override 
        public void onComplete(@NonNull Task<AuthResult> task) { 


         if (!task.isSuccessful()) { 
          Toast.makeText(LoginActivity.this, R.string.wrong_credentials, Toast.LENGTH_SHORT).show(); 
         } else { 
          goDashboard(); 
          finish(); 
         } 
        } 
       }); 
      } 
     }); 
     } 
    // onStart() state listener 
    @Override 
    public void onStart() { 
     super.onStart(); 
     mAuth.addAuthStateListener(mAuthListener); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     if (mAuthListener != null) { 
      mAuth.removeAuthStateListener(mAuthListener); 
     } 
    } 
} 
+0

Immer noch der gleiche Fehler ... –

+0

@tassilo_tazz Ich habe meinen Code bearbeitet. Es scheint, dass Ihr Listener nicht korrekt eingestellt ist und somit keine Benutzereingaben erhalten. Das ist mein Code und funktioniert perfekt. Stören Sie nicht den Namen der verschiedenen Klassen. – iMAD

+0

Dieser Code verursacht mir immer noch Fehler ... Sie können mich auf Skype hinzufügen ?: tassilo.heinrich.tazz Ich würde es sehr zu schätzen wissen. Ich habe versucht, das jetzt für 4 Stunden zu lösen. –

0

java.lang.NullPointerException: Der Versuch, virtuelle Methode ‚com.google.android.gms.tasks.Task com.google.firebase.auth.FirebaseAuth.createUserWithEmailAndPassword (java.lang aufzurufen. String, java.lang.String)‘auf ein null-Objekt Referenz

Dies bedeutet, dass Ihr mAuth Membervariable null ist. Sie haben ihm wahrscheinlich nie einen Wert zugewiesen. Weisen Sie es während onCreate() oder zumindest einige Zeit vor dem Aufruf von createUserWithEmailAndPassword mit mAuth = FirebaseAuth.getInstance() zu.

+0

Wenn der Code an der Pastebin-Verknüpfung des OP der tatsächliche Code ist, der ausgeführt wird, wird die Initialisierung ausgeführt, die Sie beschreiben. –

+0

@BobSnyder FirebaseAuth.getInstance() wird jedoch nie null zurückgeben. –

+0

@DougStevenson Das habe ich schon gemacht. Schauen Sie sich die Einfügezeile 36 an. –