【问题标题】:Error: cannot find symbol Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString()); [duplicate]错误:找不到符号 Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString()); [复制]
【发布时间】:2021-03-24 07:32:29
【问题描述】:

我正在尝试运行代码,但由于该方法已被删除,因此出现错误,但我无法理解应该写什么来代替

Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString());"

我可以看到解决方案如下:

Error: cannot find symbol method getDownloadUrl() of type com.google.firebase.storage.UploadTask.TaskSnapshot

但很难从给出的链接页面中找到解决方案。

让我知道我应该写什么?

整个代码:

    package com.example.firebasestorageexample;
    
    import androidx.annotation.NonNull;
    import androidx.appcompat.app.AppCompatActivity;
    
    import android.app.ProgressDialog;
    import android.content.ContentResolver;
    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.net.Uri;
    import android.os.Bundle;
    import android.provider.MediaStore;
    import android.view.View;
    import android.webkit.MimeTypeMap;
    import android.widget.Button;
    import android.widget.EditText;
    import android.widget.ImageView;
    import android.widget.ProgressBar;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.google.android.gms.tasks.OnFailureListener;
    import com.google.android.gms.tasks.OnSuccessListener;
    import com.google.firebase.database.DatabaseReference;
    import com.google.firebase.database.FirebaseDatabase;
    import com.google.firebase.storage.FirebaseStorage;
    import com.google.firebase.storage.OnProgressListener;
    import com.google.firebase.storage.StorageReference;
    import com.google.firebase.storage.UploadTask;
    
    import java.io.IOException;
    import java.sql.DatabaseMetaData;
    
    public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    
        //constant to track image chooser intent
        private static final int PICK_IMAGE_REQUEST = 234;
        //view objects
        private Button buttonChoose;
        private Button buttonUpload;
        private EditText editTextName;
        private TextView textViewShow;
        private ImageView imageView;
    
        //uri to store file
        private Uri filePath;
    
        //firebase objects
        private StorageReference storageReference;
        private DatabaseReference mDatabase;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            buttonChoose = (Button) findViewById(R.id.buttonChoose);
            buttonUpload = (Button) findViewById(R.id.buttonUpload);
            imageView = (ImageView) findViewById(R.id.imageView);
            editTextName = (EditText) findViewById(R.id.editText);
            textViewShow = (TextView) findViewById(R.id.textViewShow);
            storageReference = FirebaseStorage.getInstance().getReference();
            mDatabase = FirebaseDatabase.getInstance().getReference(Constants.DATABASE_PATH_UPLOADS);
    
            buttonChoose.setOnClickListener(this);
            buttonUpload.setOnClickListener(this);
            textViewShow.setOnClickListener(this);
        }
        private void showFileChooser() {
            Intent intent = new Intent();
            intent.setType("image/*");
            intent.setAction(Intent.ACTION_GET_CONTENT);
            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);
        }
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
            if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) {
                filePath = data.getData();
                try {
                    Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), filePath);
                    imageView.setImageBitmap(bitmap);
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        @Override
        public void onClick(View view) {
            if (view == buttonChoose) {
                showFileChooser();
            } else if (view == buttonUpload) {
                uploadFile();
            } else if (view == textViewShow) {
    
            }
        }
        public String getFileExtension(Uri uri) {
            ContentResolver cR = getContentResolver();
            MimeTypeMap mime = MimeTypeMap.getSingleton();
            return mime.getExtensionFromMimeType(cR.getType(uri));
        }
        private void uploadFile() {
            //checking if file is available
            if (filePath != null) {
                //displaying progress dialog while image is uploading
                final ProgressDialog progressDialog = new ProgressDialog(this);
                progressDialog.setTitle("Uploading");
                progressDialog.show();
    
                //getting the storage reference
                StorageReference sRef = storageReference.child(Constants.STORAGE_PATH_UPLOADS + System.currentTimeMillis() + "." + getFileExtension(filePath));
    
                //adding the file to reference
                sRef.putFile(filePath)
                        .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
                                //dismissing the progress dialog
                                progressDialog.dismiss();
                                //displaying success toast
                                Toast.makeText(getApplicationContext(), "File Uploaded ", Toast.LENGTH_LONG).show();
    
                                //creating the upload object to store uploaded image details
                                Upload upload = new Upload(editTextName.getText().toString().trim(), taskSnapshot.getDownloadUrl().toString());
    
                                //adding an upload to firebase database
                                String uploadId = mDatabase.push().getKey();
                                mDatabase.child(uploadId).setValue(upload);
                            }
                        })
                        .addOnFailureListener(new OnFailureListener() {
                            @Override
                            public void onFailure(@NonNull Exception exception) {
                                progressDialog.dismiss();
                                Toast.makeText(getApplicationContext(), exception.getMessage(), Toast.LENGTH_LONG).show();
                            }
                        })
                        .addOnProgressListener(new OnProgressListener<UploadTask.TaskSnapshot>() {
                            @Override
                            public void onProgress(UploadTask.TaskSnapshot taskSnapshot) {
                                //displaying the upload progress
                                double progress = (100.0 * taskSnapshot.getBytesTransferred()) / taskSnapshot.getTotalByteCount();
                                progressDialog.setMessage("Uploaded " + ((int) progress) + "%...");
                            }
                        });
            } else {
                //display an error if no file is selected
            }
        }
    }

【问题讨论】:

  • 我们甚至不知道您要做什么。如果该方法已被删除,请查看文档的早期版本,它可能会提到它已被弃用,以及其他哪些功能取代了它。
  • 这不是获取下载地址的方法。请检查副本以了解如何实现。
  • 确定下载 URL 需要调用服务器。因此,对getDownloadUrl() 的调用返回一个Task,当下载URL 从服务器返回时完成。您需要调用addSuccessListener() 以等待它完成。请参阅文档here 和此answer

标签: java android firebase firebase-storage


【解决方案1】:
 taskSnapshot.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                        @Override
                        public void onSuccess(Uri uri) {
                           File file = new File(uri.getPath());
                           Upload upload = new Upload(editTextName.getText().toString().trim(), file.getPath());
                        }
                    });

【讨论】:

  • 我们可以编写适合我的“taskSnapshot.getStorage().getDownloadUrl().toString()”,而不是编写“taskSnapshot.getDownloadUrl().toString()”。
猜你喜欢
  • 2013-02-25
  • 2012-06-23
  • 2012-03-16
  • 2019-01-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-18
  • 1970-01-01
  • 2014-05-28
相关资源
最近更新 更多