web-dev-qa-db-fra.com

Firestore getProductID ne peut pas être une erreur null

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'
21
Brandon Hoffman

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'
    }
}
48
sokarcreative

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.

2
Gil Gilbert

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());
        }
    });
0
Novo Lucas

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
}
0
J. Doe

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 "".

0
surendher

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));
0
BIOjack