2016-09-26 18 views
11

Tôi đang tạo ứng dụng Android và hiện tôi đang cố triển khai xác thực người dùng bằng Firebase. Theo như tôi có thể nói, ứng dụng của tôi được kết nối với máy chủ Firebase của tôi.FirebaseApp không khởi chạy mặc dù FirebaseApp.initializeApp() đang được gọi trong lớp Ứng dụng

Tôi gặp phải lỗi thời gian chạy khi cố gắng chuyển từ hoạt động Đăng nhập sang hoạt động Đăng ký qua nút nhấn. Ứng dụng gặp sự cố và tôi gặp lỗi thời gian chạy.

Cho đến khi tôi có thể biết, lỗi thời gian chạy là từ cuộc gọi onCreate() của hoạt động Đăng ký khi tôi cố gắng khởi tạo đối tượng FirebaseAuth với FirebaseAuth.getInstance(). Cuộc gọi này không thành công do số

java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process seniordesign.phoneafriend. Make sure to call FirebaseApp.initializeApp(Context). 

Tuy nhiên, tôi thực hiện cuộc gọi này trong phương thức ứng dụng 'onCreate() mà tôi nghĩ sẽ ổn. Tôi đã thêm cuộc gọi initalizeApp() vào cuộc gọi onCreate() của Đăng ký nhưng không có súc sắc. Tôi đã tìm kiếm những người khác với vấn đề này nhưng không tìm thấy bất cứ điều gì tương tự. Cảm ơn vì bất kì sự giúp đỡ.

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="seniordesign.phoneafriend"> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme" 
     android:name="seniordesign.phoneafriend.PhoneAFriend"> 
     <activity android:name=".SignIn"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".SignUp"></activity> 
    </application> 

</manifest> 

PhoneAFriend.java (lớp ứng dụng của tôi)

public class PhoneAFriend extends Application { 

    public void onCreate(){ 
     super.onCreate(); 
     Firebase.setAndroidContext(this); 
     FirebaseApp.initializeApp(this); 
    } 
} 

SignUp.java

public class SignUp extends AppCompatActivity { 
    protected Firebase ref; 
    protected EditText emailText; 
    protected EditText passText; 
    protected EditText confirmText; 
    protected Button button; 
    protected SignUp thisContext; 

    protected FirebaseAuth auth; 
    protected FirebaseAuth.AuthStateListener authListener; 
    private View.OnClickListener onClickListener; 

    public static Intent intent; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_signup); 
     ref = new Firebase("https://phoneafriend-7fb6b.firebaseio.com"); 
     emailText = (EditText) findViewById(R.id.signup_emailText); 
     passText = (EditText) findViewById(R.id.signup_passwordText); 
     confirmText = (EditText) findViewById(R.id.signup_passwordConfirm); 
     intent = new Intent(this, SignIn.class); 
     //Tried this already 
     //FirebaseApp.initializeApp(this); 
     auth = FirebaseAuth.getInstance(); 


     button = (Button) findViewById(R.id.signup_button); 
     onClickListener = new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       createUser(view); 
       Log.v("SignUp Button" , "Clicked; Attempting to create user"); 
      } 
     }; 
     button.setOnClickListener(onClickListener); 

     authListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(FirebaseAuth firebaseAuth) { 
       FirebaseUser user = firebaseAuth.getCurrentUser(); 
       if (user != null) { 
        // User is signed in 
        Log.d("FirebaseAuth", "onAuthStateChanged:signed_in:" + user.getUid()); 
       } else { 
        // User is signed out 
        Log.d("FirebaseAuth", "onAuthStateChanged:signed_out"); 
       } 
       // ... 
      } 
     }; 
     thisContext = this; 

    } 
    @Override 
    public void onStart(){ 
     super.onStart(); 
     //auth.addAuthStateListener(authListener); 
    } 

    @Override 
    public void onStop(){ 
     super.onStop(); 
     if(authListener != null) { 
      //auth.removeAuthStateListener(authListener); 
     } 
    } 

    protected void createUser(View view){ 
     String cString = null; 
     String pString = null; 
     String eString = emailText.getText().toString(); 
     if(passText.getText() != null && confirmText.getText() != null) { 
      pString = passText.getText().toString(); 
      cString = confirmText.getText().toString(); 
      Log.v("SignUP: Pass Null check" , "Pass"); 
      if (emailText.getText() != null && pString.equals(cString) && passText.getText() != null) { 
       Log.v("SignUP: Sign up check " , "Pass"); 
       auth.createUserWithEmailAndPassword(emailText.getText().toString() , passText.getText().toString()) 
         .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
          @Override 
          public void onComplete(@NonNull Task<AuthResult> task) { 
           Log.v("createUser complete" , "status: " + task.isSuccessful()); 
           if(task.isSuccessful()){ 
            startActivity(SignUp.intent); 
           } 
          } 

         }); 

      } 
     } 

     return; 
    } 
} 
+0

Bạn đang trộn các cuộc gọi API từ phiên bản 2.x.x cũ. SDK với SDK 9.x.x mới, Chúng không tương thích. Bạn chỉ nên sử dụng SDK mới. Xem câu trả lời có liên quan này: http://stackoverflow.com/a/39321686/4815718 –

Trả lời

5

Cũng như qbix nói, bạn có nhiều sử dụng các cuộc gọi API từ bất kỳ phiên bản nào bạn sẽ sử dụng. Nếu có thể, bạn nên sử dụng API mới hơn vì nó chắc chắn sẽ được hỗ trợ nhiều hơn nữa trong tương lai.

Xem các tài liệu ở đây:

https://firebase.google.com/docs/database/android/start/

Remove:

Firebase.setAndroidContext(this); 
FirebaseApp.initializeApp(this); 

Và đặt:

FirebaseDatabase database = FirebaseDatabase.getInstance(); 

Nếu qbix đặt comment của mình vào một câu trả lời, bạn nên chấp nhận mình thay vì tôi nhìn thấy anh ta đã đánh tôi như thế nào sau vài phút.

Ngoài ra:

Nếu bạn sử dụng căn cứ hỏa lực cũ và cần sự giúp đỡ chuyển đổi, hướng dẫn này là chỗ trên và sẽ giúp bạn với công tắc. Đó là một công tắc khá đơn giản.

https://firebase.google.com/support/guides/firebase-android

+0

'classpath 'com.google.gms: google-services: 3.0.0'' cho dự án được ưu tiên. 'compile 'com.google.android.gms: play-services: 9.8.0' biên dịch 'com.google.firebase: firebase-core: 9.8.0'' cho ứng dụng được phân loại nhưng tôi vẫn gặp sự cố. Bất kỳ ý tưởng? – Si8

+0

ở trên bình luận giải quyết vấn đề này –

8

Tôi biết có một câu trả lời đã được chấp nhận. Tuy nhiên, tôi chạy vào cùng một thông báo lỗi cho biết: java.lang.IllegalStateException: Default FirebaseApp is not initialized in this process (name). Make sure to call FirebaseApp.initializeApp(Context). Tôi đã thử một số giải pháp tìm thấy trên SO và kiểm tra lại mọi thứ cho đến khi cuối cùng tôi thấy tên gói được xác định trong Bảng điều khiển Firebase không khớp với tên gói được xác định trong tệp kê khai của tôi tập tin.

Hãy thử truy cập Bảng điều khiển Firebase của bạn -> Cài đặt dự án -> kiểm tra xem tên gói có phù hợp hay không.

Hy vọng nó có thể giúp một số :)

0

Nó là dễ dàng hơn để sử dụng các căn cứ hỏa lực thuật sĩ được bao gồm trong Android Studio: nó cho biết thêm tất cả các phụ thuộc trong các tập tin gradle, tạo ra các dự án căn cứ hỏa lực nếu cần thiết , kết nối ứng dụng với dự án, v.v.

Trong Android Studio mở trình đơn Công cụ/Firebase và làm theo hướng dẫn.

Sau đó FirebaseApp.initializeApp() sẽ trả lại giá trị hợp lệ.

+1

Ngoại trừ một số người trong chúng ta đang sử dụng những thứ như Xamarin, do đó, không có điều như một thuật sĩ firebase. –

Các vấn đề liên quan