0

我对Android非常陌生,并且希望制作一款允许用户使用Firebase存储上传图片的应用。登录后,我将它们的Uid发送到SharedPreferences,以便稍后在我的imageupload活动中检索它。我需要它,这样当图像发送到Firebase时,它将被置于其用户标识的文件夹下。Android-根据特定用户将图片上传到Firebase

这是我目前登录活动检索的UID:

FirebaseAuth auth = FirebaseAuth.getInstance(); 
     FirebaseAuth.AuthStateListener authListener = new FirebaseAuth.AuthStateListener() { 
      @Override 
      public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { 
       FirebaseUser firebaseUser = firebaseAuth.getCurrentUser(); 
       if (firebaseUser != null) { 
        String userId = firebaseUser.getUid(); 
        sharedPref = getPreferences(MODE_PRIVATE); 
        SharedPreferences.Editor editor = sharedPref.edit(); 
        editor.putString("firebasekey", userId); 
        editor.commit(); 

这是我imageupload活动:

sharedPref = getPreferences(MODE_PRIVATE); 
    String UserId = sharedPref.getString("firebasekey", "1"); 
    StorageReference storageRef= FirebaseStorage.getInstance().getReference(); 
    StorageReference mountainsRef = storageRef.child("uploads/"+UserId+System.currentTimeMillis()); 

帮助将不胜感激。

+0

你还没有提到你的实际问题。你面临的问题是什么? –

+0

您可能想看看我的博客:http://engineering.letsnurture.com/firebase-storage/ –

回答

1

在这里你去

String userUid = FirebaseAuth.getInstance().getCurrentUser().getUid(); 
UploadTask uploadTask = FirebaseStorage.getInstance().child("newFolder").getReference(userUid).putBytes(yourPhotoToByteArray); 
uploadTask 
      .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
       @Override 
       public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 

       } 
      }) 
      .addOnFailureListener(new OnFailureListener() { 
       @Override 
       public void onFailure(@NonNull Exception e) { 

       } 
      }); 

,并检索图像

StorageReference storageReference = FirebaseStorage.getInstance().getReference("newFolder/" + userUid); 

您可以阅读here更多FirebaseCloudStorage。如何上传Here,以及如何下载here

+0

我如何把图像放在uid下面? – Mozy

+0

'FirebaseStorage.getInstance()。getReference(userUid)'是你的意思吗?我不明白。 –

+0

当我将图像保存到.child的Firebase中时;我如何创建该用户的uid文件夹? – Mozy

0

嗨Mozy下面的代码应该,当被调用的启动意图从图库中选择一个图像并将其上传到firebase。希望这可以帮助。

private void updateImg() { 
    Intent intent = new Intent(); 
    intent.setType("image/*"); 
    intent.setAction(Intent.ACTION_GET_CONTENT); 
    startActivityForResult(Intent.createChooser(intent, "Select picture"), CHOOSE_IMAGE); 
} 


@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (requestCode == CHOOSE_IMAGE && resultCode == Activity.RESULT_OK) { 
     if (data == null) { 
      // Display an error 
      return; 
     } 


     // create an inputStream from the intent result we have just created 
     InputStream inputStream = null; 
     try { 
      inputStream = yourActivity.this.getContentResolver().openInputStream(data.getData()); 
      uploadImageToFirebase(inputStream); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

private void uploadImageToFirebase(InputStream rInputStream) { 
    sharedPref = getPreferences(MODE_PRIVATE); 
    String UserId = sharedPref.getString("firebasekey", "1"); 
    StorageReference storageRef = 
    FirebaseStorage.getInstance().getReference(); 
    StorageReference mountainsRef = storageRef.child("uploads/"+UserId+System.currentTimeMillis()); 
    // running the task 
    UploadTask uploadTask = mountainsRef.putStream(rInputStream); 
    uploadTask.addOnFailureListener(new OnFailureListener() { 
     @Override 
     public void onFailure(@NonNull Exception e) { 
      // show error 
     } 
    }).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() { 
     @Override 
     public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) { 
      // do ui stuff 
     } 
    }); 
} 
+0

我试图上传他们拍摄的照片,而不是已经存在的照片 – Mozy