2017-10-17 12 views
0

J'essaie d'ajouter une image à l'information de l'utilisateur dans la base de données en temps réel (firebase) pour android. J'ai téléchargé l'image sur le stockage Firebase mais comment puis-je ajouter l'image dans la base de données pour cet utilisateur?Télécharger l'image du profil pour un utilisateur Firebase

code ci-dessous:

//inside onCreate() method 

img.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i=new Intent(Intent.ACTION_PICK); 
      i.setType("image/*"); 
      startActivityForResult(i,request_code); 
     } 
    }); 

Ici, je suis en cliquant sur le imageview, donc je serai en mesure de changer et d'obtenir une image de la galerie.

Ici, j'authentifier l'utilisateur et envoyer des données à la base de données:

auth.createUserWithEmailAndPassword(email, password) 
        .addOnCompleteListener(StudentSignUpActivity.this, new OnCompleteListener<AuthResult>() { 
         @Override 
         public void onComplete(@NonNull Task<AuthResult> task) { 
          Toast.makeText(getApplicationContext(), "createUserWithEmail:onComplete:" + task.isSuccessful(), Toast.LENGTH_SHORT).show(); 
          progressBar.setVisibility(View.GONE); 
          // If sign in fails, display a message to the user. If sign in succeeds 
          // the auth state listener will be notified and logic to handle the 
          // signed in user can be handled in the listener. 
          if (!task.isSuccessful()) { 
           Toast.makeText(getApplicationContext(), "Authentication failed." + task.getException(), 
             Toast.LENGTH_SHORT).show(); 
          } else { 
           startActivity(new Intent(StudentSignUpActivity.this, HomeActivity.class)); 
           finish(); 
          } 
         } 
        }); 

mCurrentUser=FirebaseAuth.getInstance().getCurrentUser(); 
      DatabaseReference newStudent=mDatabase.push(); 
      newStudent.child("email").setValue(email); 
      newStudent.child("password").setValue(password); 
      newStudent.child("name").setValue(name); 
      newStudent.child("date").setValue(dates); 
      newStudent.child("phone").setValue(number); 
      newStudent.child("uid").setValue(mCurrentUser.getUid()); 


//outside of onCreate() 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode==request_code&&resultCode==RESULT_OK){ 
     Uri uri=data.getData(); 
     StorageReference filepath=mStorage.child("Images").child(uri.getLastPathSegment()); 
     filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

      } 
     }); 
    } 
} 

Dans le code ci-dessus, je l'ai téléchargé l'image au stockage firebase. Maintenant, comment vais-je être en mesure d'ajouter cette image en tant qu'enfant pour un utilisateur spécifique.

Je pense que je dois faire quelque chose comme ceci:

newStudent.child("image").setValue(uri_here); 

Mais je suis incapable de comprendre comment obtenir le uri de l'image et la façon d'ajouter que uri dans le setValue() depuis son dans une autre méthode.

Répondre

1

Vous pouvez utiliser la méthode getDownloadUrl() dans l'auditeur de succès pour accéder au téléchargement URL:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(requestCode==request_code&&resultCode==RESULT_OK){ 
     Uri uri=data.getData(); 
     StorageReference filepath=mStorage.child("Images").child(uri.getLastPathSegment()); 
     filepath.putFile(uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
      @Override 
      public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
       Uri downloadUrl = taskSnapshot.getDownloadUrl(); 
       newStudent.child("image").setValue(downloadUrl); 
      } 
     }); 
    } 
} 

En aparté, au lieu d'utiliser push(), je vous recommande de stocker la uid comme la clé des données de l'utilisateur. Cela rendra vos données plus faciles à trouver.

private DatabaseReference newStudent; 

mCurrentUser=FirebaseAuth.getInstance().getCurrentUser(); 
      newStudent=mDatabase.child(mCurrentUser.getUid()); 
      newStudent.child("email").setValue(email); 
      // etc 
+0

en fait la 'newStudent = mDatabase.child (mCurrentUser.getUid())' ne fonctionne pas son exception point zéro retournaient, car il n'y a pas d'utilisateur encore connecté. Le code ci-dessus est pour l'inscription –