由于某种原因我的uri没有正常保存

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

我保存 URI,然后将其与其他数据一起写入数据库,但由于某种原因,它开始看起来有所不同。这是一个例子: [1] https://i.stack.imgur.com/WXsIm.png 但是当我加载这样的东西时: [2] https://i.stack.imgur.com/fVqAv.png 这是我通常得到的: [3] https://i.stack.imgur.com/EtdJA.png

我的代码

private void uploadImageFst(){
    Bitmap bitmap=((BitmapDrawable) fst.getDrawable()).getBitmap();
    ByteArrayOutputStream baos= new ByteArrayOutputStream();
    bitmap.compress(Bitmap.CompressFormat.JPEG,100,baos);
    byte[] byteArr=baos.toByteArray();
    StorageReference mRef=mStorage.child(System.currentTimeMillis()+"deal_image");
    UploadTask up=mRef.putBytes(byteArr);
    Task<Uri> task=up.continueWithTask(new Continuation<UploadTask.TaskSnapshot, Task<Uri>>() {
        @Override
        public Task<Uri> then(@NonNull Task<UploadTask.TaskSnapshot> task) throws Exception {
            return mRef.getDownloadUrl();
        }
    }).addOnCompleteListener(new OnCompleteListener<Uri>() {
        @Override
        public void onComplete(@NonNull Task<Uri> task) {
            while(!task.isComplete());
            Uri url = task.getResult();
            uploadUriFirst=url;
        }
    });
}

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference("User");

String emailik=getIntent().getStringExtra("EmailUser").toString();
rootRef.orderByChild("Email").equalTo(emailik).addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        for(DataSnapshot ds:snapshot.getChildren()){
            User user=ds.getValue(User.class);
            Deal newDeal;
            newDeal = new Deal(getIntent().getStringExtra("EmailUser"), Name.getText().toString(),
                    Author.getText().toString(),
                    Gangrene.getText().toString(), Script.getText().toString(), Price.getText().toString(), uploadUriFirst.toString() ,uploadUriSecond.toString(),uploadUriThird.toString(),
                    StateExchange,user.Adress);
            DatabaseReference mDataBaseDeal =FirebaseDatabase.getInstance().getReference("Deal");
            mDataBaseDeal.push().setValue(newDeal);
            Toast.makeText(getApplicationContext(),"Объявление добавлено!", Toast.LENGTH_SHORT).show();
            setContentView(R.layout.mainpage);
        }

    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {

    }
});

但是当我加载这样的东西时: 这是我通常得到的:

java android firebase-realtime-database firebase-storage
1个回答
0
投票

将 URI 保存到数据库中时,存储方式和检索方式之间的编码可能不匹配。这可能会导致 URI 中出现意外字符

潜在的解决方案: 在将 URI 字符串存储到数据库之前,尝试使用

URLEncoder.encode(uriString, "UTF-8")
对其进行显式编码。 检索 URI 时,请在使用之前使用
URLDecoder.decode(uriString, "UTF-8")
对其进行解码。

© www.soinside.com 2019 - 2024. All rights reserved.