0

Ich habe durch die Firebase Dokumentation suchen, sowie Suche auf Stackoverflow, Google und YouTube nach folgenden Kriterien:Android Firebase - Benutzerregistrierung mit Profil-Foto

Erstellen einer Benutzerregistrierung, die für E-Mail, Passwort erlaubt, und Profilfoto.

Ich bin in der Lage, erfolgreich einen Benutzer mit ihrer E-Mail und Passwort hinzufügen, aber ich kann nicht die anderen Informationen in (vor allem dem Profilfoto) zu bekommen scheinen. Alle Tutorials und die Dokumentation zeigen, wie jemand, der BEREITS ein (eingeloggt) Benutzer ist, ein Foto zu Firebase hochladen kann, aber nicht für jemanden, der sich registriert. Kann mir hier jemand helfen, wie kann ich das Profilfoto und den Vor-/Nachnamen mit den neuen Nutzern hochladen?

ich FirebaseAuth bin mit dem Benutzer hinzuzufügen. Diese

ist das, was ich bisher:

checkmarkImage.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 


     auth.createUserWithEmailAndPassword(emailET.getText().toString(), passwordET.getText().toString()) 
      .addOnCompleteListener(RegisterActivity.this, new OnCompleteListener() { 
          @Override 
          public void onComplete(@NonNull Task task) { 
             Toast.makeText(RegisterActivity.this, "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); 
              //progressBar.setVisibility(View.GONE); 
           if (!task.isSuccessful()) { 
               Toast.makeText(RegisterActivity.this, "Authentication failed." + task.getException(), 
                 Toast.LENGTH_SHORT).show(); 
           } else { 
             startActivity(new Intent(RegisterActivity.this, HomeActivity.class)); 
             finish(); 
              } 
              } 
            }); 
         } 
        }); 

     uploadProfilePhoto.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       handleChooseImage(view); 
      } 
     }); 


    } 

    //END OF onCreate 

    //Separate methods 

    //Actually opens the CameraRoll 
     public void handleChooseImage(View v) { 
      Intent i = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI); 
      startActivityForResult(i, SELECTED_PICTURE); //then goes to onActivityResult 
     } 
     public void handleInsertData(View v) { 

     } 

    public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) { 
     super.onActivityResult(requestCode, resultCode, imageReturnedIntent); 
     switch (requestCode) { 
      case 0: 
       if(requestCode == RESULT_OK) { 
        Log.i("RegisterActivity", "case 0"); 
       } 
       break; 
      case 1: 
       if(resultCode == RESULT_OK) { 
        Uri selectedImage = imageReturnedIntent.getData(); 
        Log.i("RegisterActivity", "selected image = " + selectedImage); 

       } 
       break; 
     } 
    } 
} 

Antwort

0

Sie müssen sich zuerst anmelden und dann Benutzer Bilder im Speicher laden dies Standardweg.

weil nach Feuerbasis Speicherstandardregel user != null so Benutzer-Auth Zustand nicht null oder sonst können Sie in den öffentlichen Feuerbasis Regel ändern (es ist nicht bevorzugt)

Ich hoffe, dies wird Ihnen helfen müssen.

auth.createUserWithEmailAndPassword(email, password) 
         .addOnCompleteListener(SignupActivity.this, new OnCompleteListener<AuthResult>() { 
          @Override 
          public void onComplete(@NonNull Task<AuthResult> task) { 
            if (!task.isSuccessful()) { 
            aDialog.show(); 
           } else { 
            final String uid = task.getResult().getUser().getUid(); 

            StorageReference filepath = mStorage.child("user_profile").child(mImageUri.getLastPathSegment()); 
            filepath.putFile(mImageUri).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() { 
             @Override 
             public void onProgress(UploadTask.TaskSnapshot taskSnapshot) { 
              double progress = (100.0 * taskSnapshot.getBytesTransferred())/taskSnapshot.getTotalByteCount(); 
              if (progress == 100) { 
               hideProgressDialog(); 
               //upload(); 
              } 
              System.out.println("Upload is " + progress + "% done"); 
             } 
            }).addOnPausedListener(new OnPausedListener<UploadTask.TaskSnapshot>() { 
             @Override 
             public void onPaused(UploadTask.TaskSnapshot taskSnapshot) { 
              System.out.println("Upload is paused"); 
             } 
            }).addOnFailureListener(new OnFailureListener() { 
             @Override 
             public void onFailure(@NonNull Exception exception) { 
              // Handle unsuccessful uploads 
             } 
            }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
             @Override 
             public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
              /** Get Image Download Path**/ 
              Uri downloadUri = taskSnapshot.getDownloadUrl(); 

              /** Converting Image Uri In String **/ 

              if (downloadUri != null) { 
               imagerls = downloadUri.toString(); 
              } 

              //Add user data and image URL to firebase database 
             } 

            }); 
           } 
          } 
         }); 
+0

Um zu klären, Sie sagen, Sie nicht ein Bild hochladen können, während Sie ein neues Konto registrieren? Nur nachdem der Benutzer bereits in der Datenbank ist und zum Aktualisieren geht? Wenn ja, was macht Ihr vorstehender Code? Dank –

+0

Natürlich können Sie Ihr Bild weiß Benutzer Registrierung, aber normale Weg ist laden zuerst Sie Ihre Registrierung abschließen und dann in Ihrem -onSuccessListner- Upload Bild, Bild-Upload fertig Ones Bild-URL erhalten, und Speichern von Benutzerdaten mit neu Bild-URL hochgeladen Mein Code hat dieselbe Aufgabe für mich erledigt. –

+0

Ich schlage vor, die Benutzeranmeldung zuerst lassen, damit du das Benutzerobjekt bekommen und dann Bild hochladen Speicher mit dieser Benutzer-ID zu Feuerbasis (einzigartige Verbindung für Benutzerprofil Bilder von Feuerbasis Speichern haben) Update für das Benutzerobjekt machen. Das ist es. –

0

Sie Bild unabhängig von der Registrierung des Nutzers auf der Feuerbasis hochladen, Sie jedoch die Benutzerreferenz benötigen würde das Bild zu speichern, es wieder zu bekommen, wenn sich der Benutzer in, und Sie können nicht Haben Sie die Referenz dieses Benutzers, wenn der Benutzer noch nicht registriert ist. macht Sinn? :)

+0

Bedeutet dies, dass es auf einer separaten Aktivität/Java-Datei durchgeführt werden muss? Ich denke schon, obwohl warum ein Benutzername und ein Passwort mit dem verbunden werden können, was zum Zeitpunkt der Registrierung keine Referenz hat? –

+0

1: Sie können Bild auf Registrierung Erfolg Zuhörer gegen die E-Mail-ID in der gleichen Aktivität laden, OR . 2: können Sie sich registrieren und anmelden und nutzen FirebaseAuth.getInstance() GetCurrentUser() den aktuellen Benutzer für ref zu erhalten und die sparen Bild in der Haupttätigkeit, das ist, was ich vorschlagen würde. speichern Sie E-Mail, übergeben und natürlich den Pfad zur Benutzeranzeige in der Datenbank. Hoffe es hilft. – Numanqmr

Verwandte Themen