【问题标题】:Store image into firebase storage with uri使用 uri 将图像存储到 Firebase 存储中
【发布时间】:2018-11-05 15:52:02
【问题描述】:

我尝试使用 getDownloadUri 将图像存储到 Firebase 存储中,但它已被弃用,因此我使用 uri 存储图像,但在这一行出现错误:String link = uri.toString; 错误是无法解析符号uri

private DatabaseReference Userdatabase;
private StorageReference storageReference;
private FirebaseAuth firebaseAuth;

private StorageTask mUploadTask;

private Uri imageUri;

ImageView imageView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);

    imageView = (ImageView) findViewById(R.id.imageView);

    firebaseAuth = FirebaseAuth.getInstance();

    Userdatabase = FirebaseDatabase.getInstance().getReference("User");

    progressDialog = new ProgressDialog(Signup.this);

    storageReference = FirebaseStorage.getInstance().getReference("Seller");

    signupButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            RegisterAccount();

        }
    });


    imageView.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            selectImage();
        }
    });
}

public void selectImage() {
    Intent photoPickerIntent = new Intent();
    photoPickerIntent.setType("image/*");
    photoPickerIntent.setAction(Intent.ACTION_PICK);
    startActivityForResult(photoPickerIntent, PICK_IMAGE_REQUEST);
}

private String getFileExtension(Uri uri) {
    ContentResolver cR = getContentResolver();
    MimeTypeMap mime = MimeTypeMap.getSingleton();
    return mime.getExtensionFromMimeType(cR.getType(uri));
}

@Override
public 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) {


        imageUri = data.getData();
        Picasso.with(this).load(imageUri).into(imageView);

    }
}


public void RegisterAccount() {

    final String email = emailText.getText().toString();
    final String username = nameText.getText().toString();
    final String pass = passwordText.getText().toString();

    if ((TextUtils.isEmpty(address))) {
        addressText.setError("address is required");
        addressText.requestFocus();
        return;
    }

    AddUser(email, username, pass, phone, comfirmpass, address);


}

public void AddUser(final String UserEmail, final String Username, final String Password,
                    final String PhoneNumber, final String confirmPassword, final String Address) {

    String email = UserEmail.replace(".", ",");

    Userdatabase = FirebaseDatabase.getInstance().getReference("User").child(email);

    Userdatabase.addListenerForSingleValueEvent(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            if (dataSnapshot.exists()) {

                String value = dataSnapshot.getValue(String.class);

                Toasty.warning(getApplicationContext(), "The Email you use already Exist !", Toast.LENGTH_SHORT, true).show();
                return;
            }


            if (!dataSnapshot.exists()) {
                if (imageUri != null) {
                  final  StorageReference fileReference = storageReference.child(System.currentTimeMillis()
                            + "." + getFileExtension(imageUri));



                    mUploadTask = fileReference.putFile(imageUri)
                            .addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
                                @Override
                                public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {

                                    fileReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                                        @Override
                                        public void onSuccess(Uri downloadUri) {
                                            String link = uri.toString;
                                            Toast.makeText(Signup.this, "Register successful", Toast.LENGTH_LONG).show();
                                            final User user = new User(Address, confirmPassword, UserEmail, Password, PhoneNumber, Username,
                                                    link);
                                            Userdatabase.setValue(user);
                                        }
                                    });
                                }
                            });
                }
            }
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {
            return;
        }
    });

    firebaseAuth.createUserWithEmailAndPassword(UserEmail, Password).addOnCompleteListener(new OnCompleteListener<AuthResult>() {
        @Override
        public void onComplete(@NonNull Task<AuthResult> task) {

            progressDialog.dismiss();

            if (!task.isSuccessful()) {
                Log.i(TAG, "Buyer FirebaseAuth Register : Fail");
                Toasty.error(getApplicationContext(), "The Email you use already Exist !", Toast.LENGTH_SHORT, true).show();
                } else {
                Log.i(TAG, "Buyer FirebaseAuth Register : Success");
                UserEmail.replace(".", ",");
                final User user = new User(Address, confirmPassword, UserEmail, Password, PhoneNumber, Username,link);
                Userdatabase.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (!dataSnapshot.exists()) {
                            Userdatabase.setValue(user);
                            Log.i(TAG, "FirebaseDatabase Add Buyer : Success");
                            Toasty.success(getApplicationContext(), "Register Complete", Toast.LENGTH_SHORT, true).show();
                            }
                            }
                            @Override
                            public void onCancelled(@NonNull DatabaseError databaseError) {
                        Log.w(TAG, "Database Error");
                        }
                        });
                }
                }
                });
}

我已经删除了一些代码,所以如果您需要更多详细信息,请在下方评论。非常感谢您的帮助

【问题讨论】:

  • 函数uri中没有变量。也许你想使用downloadUri.toString()

标签: android firebase firebase-storage


【解决方案1】:

您收到以下错误:

无法解析符号 uri

因为你在一个不存在的对象上调用toString() 方法。要解决这个问题,请更改以下代码行:

String link = uri.toString();

String link = downloadUri.toString();

【讨论】:

  • 我试过了,但是在 firebase auth.create user 那部分之后,这行:final User user = new User(Address, confirmPassword, UserEmail, Password, PhoneNumber, Username,link);有一个错误,那里的链接,无法解析符号链接
  • 很高兴听到它起作用了 :) 你得到另一个错误的事实,这意味着最初的错误消失了,这是个好消息 :) 但这听起来是一个基本上应该考虑的新问题另一个无法在评论中回答或仅使用上述数据的问题。作为个人猜测,我认为您正在谈论的 link 对象确实存在,但为了遵守这个社区的规则,请使用 MCVE 发布另一个新问题,所以我和其他用户可以帮助你。
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 1970-01-01
  • 2020-04-16
  • 2019-03-10
  • 2017-09-25
相关资源
最近更新 更多