我的代码是:
然后在 mp3 上传 onSucess() 中,我检索元数据并上传 mp3 专辑封面: 并将下载链接分配给上面创建的 str。
我已经检查了第二个 img 中的 onSucess() 内部,str = 下载链接但是当移动到第三个 img 时它再次 =“”。
我已经为 str 尝试了静态、非静态、局部变量等,但没有用。
这里是完整代码
private static String str = "";
private void uploadFile() {
if (!filename.getText().toString().equals("") && imgView != null) {
StorageReference mp3ref = mp3StorageRef.child(SongName.getText().toString().trim() + "_" + System.currentTimeMillis() + "." + getFileExtension(Mp3_uri));
mp3ref.putFile(Mp3_uri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
progressBar.setProgress(0);
}
}, 500);
MediaMetadataRetriever mediaMetadataRetriever = new MediaMetadataRetriever();
mediaMetadataRetriever.setDataSource(getContext(), Mp3_uri);
String name = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_TITLE);
String artist = mediaMetadataRetriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ARTIST);
byte[] art = mediaMetadataRetriever.getEmbeddedPicture();
StorageReference cover = coverStorageRef.child("cover_" + name + "_" + System.currentTimeMillis() + ".jpg");
cover.putBytes(art).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
while (!urlTask.isSuccessful()) ;
Uri downloadUrl = urlTask.getResult();
str = (downloadUrl.toString());
}
});
Task<Uri> urlTask = taskSnapshot.getStorage().getDownloadUrl();
while (!urlTask.isSuccessful()) ;
Uri downloadUrl = urlTask.getResult();
Song song = new Song(name, artist, str, downloadUrl.toString());
String uploadId = databaseReference.push().getKey();
databaseReference.child(uploadId).setValue(song);
Toast.makeText(getContext(), "Upload Success", Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(getContext(), "Upload Failed", Toast.LENGTH_SHORT).show();
}
}).addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
@Override
public void onProgress(@NonNull UploadTask.TaskSnapshot snapshot) {
double Progress = (100.0 * snapshot.getBytesTransferred() / snapshot.getTotalByteCount());
progressBar.setProgress((int) Progress);
}
});
} else {
Toast.makeText(getContext(), "No File Selected", Toast.LENGTH_SHORT).show();
}
}
上传 2 个文件(mp3 和 jpg)并检索两个文件下载链接的方法。