java - 在“FirebaseFirestore”中,保存的不是图片链接,而是一些难以理解的内容
问题描述
单击setupBtn
保存以下内容com.google.android.gms.tasks.zzu@9138f83
而不是图像链接。
我认为整个问题都在这一行
Uri download_uri = Uri.parse(task.getResult().getMetadata().getReference().getDownloadUrl().toString());
告诉我问题是什么以及如何解决它。
完整的代码Activity
public class SetupActivity extends AppCompatActivity {
private CircleImageView setupImage;
private Uri mainImageURI = null;
private String user_id;
private boolean isChanged = false;
private EditText setupName;
private Button setupBtn;
private ProgressBar setupProgress;
private StorageReference storageReference;
private FirebaseAuth firebaseAuth;
private FirebaseFirestore firebaseFirestore;
@SuppressLint("CheckResult")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup);
Toolbar setupToolbar = findViewById(R.id.setupToolbar);
setSupportActionBar(setupToolbar);
Objects.requireNonNull(getSupportActionBar()).setTitle("Account Setup");
firebaseAuth = FirebaseAuth.getInstance();
firebaseFirestore = FirebaseFirestore.getInstance();
user_id = Objects.requireNonNull(firebaseAuth.getCurrentUser()).getUid();
storageReference = FirebaseStorage.getInstance().getReference();
setupImage = findViewById(R.id.setup_image);
setupName = findViewById(R.id.setup_name);
setupBtn = findViewById(R.id.setup_btn);
setupProgress = findViewById(R.id.setup_progress);
setupProgress.setVisibility(View.VISIBLE);
setupBtn.setOnClickListener(v -> {
String user_name = setupName.getText().toString();
if (!TextUtils.isEmpty(user_name) && mainImageURI != null) {
String user_id = firebaseAuth.getCurrentUser().getUid();
setupProgress.setVisibility(View.VISIBLE);
StorageReference image_path = storageReference.child("profile_image").child(user_id + ".jpg");
image_path.putFile(mainImageURI).addOnCompleteListener(task -> {
if (task.isSuccessful()){
Uri download_uri = Uri.parse(task.getResult().getMetadata().getReference().getDownloadUrl().toString());
Map<String, String> userMap = new HashMap<>();
userMap.put("name", user_name);
userMap.put("image", download_uri.toString());
firebaseFirestore.collection("Users").document(user_id).set(userMap).addOnCompleteListener(task1 -> {
if(task1.isSuccessful()){
Toast.makeText(SetupActivity.this, "Update", Toast.LENGTH_LONG).show();
Intent mainIntent = new Intent(SetupActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
}else {
String error = task1.getException().getMessage();
Toast.makeText(SetupActivity.this, "Firestore Error" + error, Toast.LENGTH_LONG).show();
}
setupProgress.setVisibility(View.INVISIBLE);
});
}else {
String error = task.getException().getMessage();
Toast.makeText(SetupActivity.this, "Image Error" + error, Toast.LENGTH_LONG).show();
setupProgress.setVisibility(View.INVISIBLE);
}
});
}
});
setupImage.setOnClickListener(v -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(SetupActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(SetupActivity.this, "Pre D", Toast.LENGTH_LONG).show();
ActivityCompat.requestPermissions(SetupActivity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
} else {BringImagePicker();}
}else {BringImagePicker();}
});
}
private void BringImagePicker() {
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1, 1)
.start(SetupActivity.this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
mainImageURI = result.getUri();
setupImage.setImageURI(mainImageURI);
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}
}
解决方案
为了解决这个问题,我将代码固定到这个:
image_path.putFile(mainImageURI).addOnCompleteListener(task -> {
if (task.isSuccessful()) {
image_path.putFile(mainImageURI).addOnSuccessListener(taskSnapshot ->
image_path.getDownloadUrl().addOnSuccessListener(uri -> {
String downloadUrl = uri.toString();
Map<String, String> userMap = new HashMap<>();
userMap.put("name", user_name);
userMap.put("image", downloadUrl);
firebaseFirestore.collection("Users").document(user_id).set(userMap).addOnCompleteListener(task1 -> {
if (task1.isSuccessful()) {
Toast.makeText(SetupActivity.this, "Update", Toast.LENGTH_LONG).show();
Intent mainIntent = new Intent(SetupActivity.this, MainActivity.class);
startActivity(mainIntent);
finish();
} else {
String error = task1.getException().getMessage();
Toast.makeText(SetupActivity.this, "Firestore Error" + error, Toast.LENGTH_LONG).show();
}
setupProgress.setVisibility(View.INVISIBLE);
});
}));
} else {
String error = task.getException().getMessage();
Toast.makeText(SetupActivity.this, "Image Error" + error, Toast.LENGTH_LONG).show();
setupProgress.setVisibility(View.INVISIBLE);
}
});
推荐阅读
- opengl - 为什么不在法线贴图纹理上计算 TBN 矩阵?
- entity-framework-core - 在 .Net 5.0.4 Entity Framework 查询中使用具有多个值的 [Flags]
- arrays - 从数组列表中将对象推送到数组
- python - 我在修改玩具 scikit-learn gridsearchCV 示例时收到警告“用户警告:一个或多个测试分数是非限定的”
- javascript - 如果变量为真,则不显示重定向警告
- ios - UIButton 和临时 UIMenu
- ruby-on-rails - 如何让 postgres 从 big sur 开始?
- javascript - 一个在所有整数中出现频率相同的数
- reactjs - TypeError: prevDeps is undefined 尝试在 React 中添加 Material UI 组件时出错
- swift - 尝试在 Swift Playground (Xcode 12.4) 中加载文件时出现 EXC_BAD_INSTRUCTION