无法在 Android Studio 中分配字符串值

问题描述 投票:0回答:0

我的代码是:

  • 选择本地 Mp3 Uri
  • 上传到 Firebase
  • 然后检索该 mp3 元数据,例如名称、艺术家、专辑封面...
  • 上传专辑封面到 Firebase
  • 在 Firebase Realtime 数据库中创建一个新对象,包括 mp3 和封面下载链接、名称和艺术家。

我有一个Create the String

然后在 mp3 上传 onSucess() 中,我检索元数据并上传 mp3 专辑封面:Uploading the album cover 并将下载链接分配给上面创建的 str。

最后创建一个歌曲对象并将其推送到实时数据库:push song object to db

但是 str 是 = ""。数据库上的结果是这样的db result

我已经检查了第二个 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)并检索两个文件下载链接的方法。

java android firebase file-upload assign
© www.soinside.com 2019 - 2024. All rights reserved.