我保存 URI,然后将其与其他数据一起写入数据库,但由于某种原因,它开始看起来有所不同。这是一个例子: [1] 但是当我加载这样的东西时: [2] 这是我通常得到的: [3]
我的代码
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) {
}
});
将 URI 保存到数据库中时,存储方式和检索方式之间的编码可能不匹配。这可能会导致 URI 中出现意外字符
潜在的解决方案: 在将 URI 字符串存储到数据库之前,尝试使用
URLEncoder.encode(uriString, "UTF-8")
对其进行显式编码。
检索 URI 时,请在使用之前使用 URLDecoder.decode(uriString, "UTF-8")
对其进行解码。