webentwicklung-frage-antwort-db.com.de

Firestore getProductID kann kein Nullfehler sein

Ich versuche, den neuen Firestore von Firebase in meiner Android-App zu verwenden. Leider erhalte ich diese Fehlermeldung beim Versuch, in die Datenbank zu schreiben.

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);
                        }
                    });

        }
    });
}

Dies ist der Fehler, den ich immer wieder bekomme. Ich habe das Projekt über den Assistenten meiner Android-App hinzugefügt. Es sollte also kein Problem geben.

Prozess: damn.testapp, PID: 2622
Java.lang.IllegalArgumentException: FirebaseOptions.getProjectId () kann nicht auf .__ null sein. com.google.firebase.firestore.FirebaseFirestore.zze (unbekannte Quelle) um com.google.firebase.firestore.FirebaseFirestore.getInstance (Unknown Source) um damn.testapp.MainActivity $ 1.onClick (MainActivity.Java:44). bei Android.view.View.performClick (View.Java:5637) unter Android.view.View $ PerformClick.run (View.Java:22429) um Android.os.Handler.handleCallback (Handler.Java:751) um Android.os.Handler.dispatchMessage (Handler.Java:95) um Android.os.Looper.loop (Looper.Java:154) um Android.app.ActivityThread.main (ActivityThread.Java:6119) um Java.lang.reflect.Method.invoke (native Methode) um com.Android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.Java:886) at com.Android.internal.os.ZygoteInit.main (ZygoteInit.Java:776)

Jede Hilfe wäre sehr dankbar.

Hier sind meine Sicherheitsregeln für die Datenbank

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

Und das ist die Abhängigkeit, die ich verwende:

    compile 'com.google.firebase:firebase-firestore:11.4.2'
21
Brandon Hoffman

Ich hatte das gleiche Problem ... mit diesem in gradle gelöst: 3.0.0 bis 3.1.0

buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:3.1.0'
    }
}
48
sokarcreative

Dieser Fehler kann auftreten, wenn Sie über eine google-services.json-Datei verfügen, jedoch keinen project_id-Schlüssel im Abschnitt project_info.

Dies kann passieren, wenn Sie Firestore zu einer vorhandenen App mit einer älteren Datei google-services.json hinzufügen. Projekt-ID ist ein relativ neues Feld in dieser Datei, das zur Unterstützung von Firestore hinzugefügt wurde. 

Melden Sie sich an der Firebase-Konsole an, finden Sie Ihre App dort, laden Sie die Datei google-services.json erneut herunter, ersetzen Sie sie in Ihrem Projekt, und Sie sollten bereit sein.

2
Gil Gilbert

Das verursacht das Problem.

FirebaseFirestore db = FirebaseFirestore.getInstance();

Verwenden Sie es stattdessen so:

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

Und die Daten so speichern;

    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

sokarcreative antwort hat bei mir nicht funktioniert. Ich tat dies:

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

Dies ist ein Problem beim Senden des Schlüssels mit dem Wert "null". Versuchen Sie, den Schlüsselwert durch eine leere Zeichenfolge "" zu ersetzen.

0
surendher

Ich habe 

buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.2.0'
    }
}

und die Lösung befindet sich im Konstruktor von 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