2017-10-04 28 views
15

Próbuję użyć nowego Firestore wydanego przez Firebase w mojej aplikacji na Androida. Niestety ciągle otrzymuję ten błąd podczas próby zapisu do bazy danych.Firestore getProductID nie może być błędem zerowym

public class MainActivity extends AppCompatActivity { 

EditText txtName,txtSurname; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    txtName = findViewById(R.id.Name); 
    txtSurname = findViewById(R.id.Surname); 

    FloatingActionButton fab = findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      FirebaseFirestore db = FirebaseFirestore.getInstance(); 

      Map<String, Object> user = new HashMap<>(); 
      user.put("first", "Ada"); 
      user.put("last", "Lovelace"); 
      user.put("born", 1815); 

      db.collection("users") 
        .add(user) 
        .addOnSuccessListener(new OnSuccessListener<DocumentReference>() { 
         @Override 
         public void onSuccess(DocumentReference documentReference) { 
          //Log.d(TAG, "DocumentSnapshot added with ID: " + documentReference.getId()); 
         } 
        }) 
        .addOnFailureListener(new OnFailureListener() { 
         @Override 
         public void onFailure(@NonNull Exception e) { 
          //Log.w(TAG, "Error adding document", e); 
         } 
        }); 

     } 
    }); 
} 

To jest błąd, który ciągle dostaję. Dodałem projekt do mojej aplikacji na Androida przez asystenta. Więc nie powinno być problemu.

procesu: damn.testapp PID: 2622
java.lang.IllegalArgumentException: FirebaseOptions.getProjectId() nie może być pusty w com.google.firebase.firestore.FirebaseFirestore.zze (nieznanego pochodzenia), w com.google.firebase.firestore.FirebaseFirestore.getInstance (nieznany Źródło) at damn.testapp.MainActivity 1,7 USD (MainActivity.java:44) 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.Hand ler.dispatchMessage (Handler.java:95) pod adresem android.os.Looper.loop (Looper.java:154) pod adresem android.app.ActivityThread.main (ActivityThread.java: 6119) pod adresem java.lang.reflect. Method.invoke (Metoda natywna) pod adresem com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:886) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:776)

Każda pomoc zostanie bardzo doceniona.

Oto moje zasady bezpieczeństwa dla bazy

service cloud.firestore { 
    match /databases/{database}/documents { 
match /{document=**} { 
    allow read, write; 
    } 
    } 
} 

I to jest zależność Używam:

compile 'com.google.firebase:firebase-firestore:11.4.2' 

Odpowiedz

36

Miałem ten sam problem. rozwiązano to w Gradle: 3.0.0 do 3.1.0

buildscript { 
    dependencies { 
     classpath 'com.google.gms:google-services:3.1.0' 
    } 
} 
+0

To działało !!! Dziękuję Ci!!! –

+0

dziękuję, zadziałało też dla mnie –

+0

Jak to odkryłeś? – funkybro

0

to jest przyczyną problemu.

FirebaseFirestore db = FirebaseFirestore.getInstance(); 

Zamiast używać go tak:

private DocumentReference documentReference = FirebaseFirestore.getInstance().document("sampleData/myData"); 

I zapisać dane jak ten;

Map<String, Object> user = new HashMap<>(); 
    user.put("first", "Ada"); 
    user.put("last", "Lovelace"); 
    user.put("born", 1815); 
    documentReference 
      .set(user).addOnSuccessListener(new OnSuccessListener<Void>() { 
     @Override 
     public void onSuccess(Void aVoid) { 
      Log.d("MainActivity", "DocumentSnapshot added with ID: " + documentReference.getId()); 
     } 
    }); 
+0

Nadal pojawia się ten sam błąd. –

+0

Czy zmodyfikowałeś reguły bezpieczeństwa bazy danych w Firebase Console i dodano zależność Firestore? –

+0

Mam najbardziej aktualną zależność i odblokowane reguły bezpieczeństwa dla bazy danych. –

2

Ten błąd może się zdarzyć, jeśli masz plik google-services.json ale nie posiada project_id klucz w sekcji project_info.

Może się to zdarzyć, jeśli dodajesz Firestore do istniejącej aplikacji ze starszym plikiem google-services.json. Identyfikator projektu jest stosunkowo nowym polem w tym pliku, dodanym do obsługi Firestore.

Zaloguj się na konsoli Firebase, znaleźć tam swoją aplikację, ponownie pobrać plik google-services.json, wymień go w swoim projekcie, i powinno być dobrze iść.

+0

Po prostu to zrobiłem, również odinstalowałem aplikację, wyczyściłem dane i pamięć podręczną, i nic. Nadal daje mi 'IllegalArgumentException: FirebaseOptions.getProjectId() nie może być wartością null' Sprawdzam mój 'project_info' i ma on prawo' project_id' –

+0

Czy to możliwe, że nie używasz wtyczki usług Google? Twoja budowla? Zobacz kroki na dole https://firebase.google.com/docs/android/setup?authuser=0#manually_add_firebase –

+0

Problemem była moja wersja usług Google. Właśnie uaktualniłem go do '3.1.0' i jego pracy –

0

odpowiedź sokarcreative nie pracował dla mnie.Zrobiłem to:

buildscript { 

    repositories { 
     google() 
     jcenter() 
    } 
    dependencies { 
     classpath 'com.android.tools.build:gradle:3.0.1' 
     classpath 'com.google.gms:google-services:3.1.1' 
    } 
} 

allprojects { 
    repositories { 
     google() 
     jcenter() 
     maven { 
      url "https://maven.google.com" // Google's Maven repository 
     } 
    } 
} 

task clean(type: Delete) { 
    delete rootProject.buildDir 
} 
0

Jest to problem z wysłaniem klucza zawierającego wartość "null". Spróbuj zastąpić wartość klucza pustym ciągiem "".