J'essaie d'utiliser le nouveau Firestore publié par Firebase dans mon application Android. Malheureusement, cette erreur persiste lorsque j'essaie d'écrire dans la base de données.
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);
}
});
}
});
}
C'est l'erreur que je continue à avoir. J'ai ajouté le projet à mon application Android via l'assistant. Donc, il ne devrait pas y avoir de problème.
Processus: damn.testapp, PID: 2622
Java.lang.IllegalArgumentException: FirebaseOptions.getProjectId () ne peut pas être nul à com.google.firebase.firestore.FirebaseFirestore.zze (Source inconnue) à l'adresse com.google.firebase.firestore.FirebaseFirestore.getInstance (Unknown Source) à l'adresse damn.testapp.MainActivity $ 1.onClick (MainActivity.Java:44) sur Android.view.View.performClick (View.Java:5637) sur Android.view.View $ PerformClick.run (View.Java:22429) à l'adresse Android.os.Handler.handleCallback (Handler.Java:751) à l'adresse Android.os.Handler.dispatchMessage (Handler.Java:95) à Android.os.Looper.loop (Looper.Java:154) à l'adresse Android.app.ActivityThread.main (ActivityThread.Java:6119) à Java.lang.reflect.Method.invoke (Méthode native) à com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:886) sur com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:776)
Toute aide serait grandement appréciée.
Voici mes règles de sécurité pour la base de données
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write;
}
}
}
Et voici la dépendance que j'utilise:
compile 'com.google.firebase:firebase-firestore:11.4.2'
J'ai eu le même problème .. Résolu avec ceci en grade: 3.0.0 à 3.1.0
buildscript {
dependencies {
classpath 'com.google.gms:google-services:3.1.0'
}
}
Cet échec peut se produire si vous avez un fichier google-services.json mais qu'il n'a pas de clé project_id
dans la section project_info
.
Cela peut arriver si vous ajoutez Firestore à une application existante avec un ancien fichier google-services.json. L'ID de projet est un champ relativement nouveau dans ce fichier, ajouté pour prendre en charge Firestore.
Connectez-vous à la console Firebase, trouvez votre application ici, téléchargez à nouveau le fichier google-services.json, remplacez-le dans votre projet et vous devriez être prêt.
Cela cause le problème.
FirebaseFirestore db = FirebaseFirestore.getInstance();
Au lieu de cela, utilisez-le comme ceci:
private DocumentReference documentReference = FirebaseFirestore.getInstance().document("sampleData/myData");
Et sauvegardez les données comme ceci;
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());
}
});
réponse sokarcreative n'a pas fonctionné pour moi. J'ai fait ça:
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
}
C'est un problème avec l'envoi de la clé contenant la valeur "null". Essayez de remplacer la valeur de la clé par une chaîne vide "".
J'ai
buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.2.0'
}
}
et la solution est dans le constructeur de FirebaseOptions .setProjectId (prjID)
String projectID = "project-id-com";
FirebaseOptions options = new FirebaseOptions.Builder()
.setApplicationId("1:26000034:Android:6d45000000534")
.setApiKey("AIzaSyAbsrv0000000000eml95vFOs")
.setDatabaseUrl("https://" + projectID + ".firebaseio.com")
.setProjectId(projectID)
.build();
FirebaseApp.initializeApp(context, options, projectID);
FirebaseApp app = FirebaseApp.getInstance(projectID);
FirebaseFirestore db = FirebaseFirestore.getInstance(app);
Map<String, Object> city = new HashMap<>();
city.put("name", "Los Angeles");
city.put("state", "CA");
city.put("country", "USA");
db.collection("documents")
.document("example")
.set(city)
.addOnSuccessListener(documentReference ->
Log.d(TAG, "DocumentSnapshot added with ID: " ))
.addOnCompleteListener(ab ->
Log.d(TAG, "complete: "))
.addOnFailureListener(e ->
Log.d(TAG, "Error adding document", e));