gpt4 book ai didi

java - 如何获取Uri值?

转载 作者:行者123 更新时间:2023-12-02 01:45:25 25 4
gpt4 key购买 nike

我已将字符串 photolink 的值复制到另一个字符串 PhotoLink1 中,但这仅在 URI 方法中显示值,而不是在外部方法,我不知道如何获得该值或者有什么我错过的。请告诉我如何获取这个值或者我应该如何使这个代码工作。我搜索了很多与此相关的问题,但找不到解决方案。

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_setup);
Toolbar toolbar = (Toolbar)findViewById(R.id.setup_toolbar);
setSupportActionBar(toolbar);
firebaseAuth= FirebaseAuth.getInstance();
firestore = FirebaseFirestore.getInstance();
storageReference=FirebaseStorage.getInstance().getReference();
getSupportActionBar().setTitle("Account Setup");
circleImageView=(CircleImageView)findViewById(R.id.imageView);
n=(EditText)findViewById(R.id.name_txt_up);
s=(Button)findViewById(R.id.save_set_button);
s.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
final String user = n.getText().toString().trim();
if(!TextUtils.isEmpty(user) && imageURI!=null)
{
String user_id= firebaseAuth.getCurrentUser().getUid();
StorageReference img_path = storageReference.child("profile_image").child(user_id+ ".jpg");
img_path.putFile(imageURI).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {

if(task.isSuccessful())
{
Task<Uri> task_uri = task.getResult().getMetadata().getReference().getDownloadUrl();
task_uri.addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
String photoLink = uri.toString();
getImageUri(photoLink);
Toast.makeText(Setup_Activity.this, ""+photoLink, Toast.LENGTH_SHORT).show();
Log.d("photLink", ""+PhotoLink1);
}
});

Map<String,String > userMap= new HashMap<>();
userMap.put("name",user);
userMap.put("image", PhotoLink1);
firestore.collection("Users").document().set(userMap).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if(task.isSuccessful())
{
Toast.makeText(Setup_Activity.this, "This is good", Toast.LENGTH_SHORT).show();
}
else
{
String err= task.getException().getMessage();
Toast.makeText(Setup_Activity.this, "Error "+err, Toast.LENGTH_SHORT).show();
}
}
});
}
else
{
String err= task.getException().getMessage();
Toast.makeText(Setup_Activity.this, "Error "+err, Toast.LENGTH_SHORT).show();
}
}
});
}
else
{
Toast.makeText(Setup_Activity.this, "Empty Text Fields", Toast.LENGTH_SHORT).show();
}
}
});
circleImageView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M)
{
if(ContextCompat.checkSelfPermission(Setup_Activity.this, Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED)
{
Toast.makeText(Setup_Activity.this, "Permission Denied", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(Setup_Activity.this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},1);
}
else
{
getImage();


}
}
else
{
getImage();
}
}
});


}

private void getImageUri(String photoLink) {
PhotoLink1 =photoLink;
}

public void getImage(){
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.start(Setup_Activity.this);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable 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) {
imageURI = result.getUri();
circleImageView.setImageURI(imageURI);
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}

最佳答案

当您尝试使用以下代码行将这些值添加到 userMap 时:

Map<String,String > userMap = new HashMap<>();
userMap.put("name",user);
userMap.put("image", PhotoLink1);

photoLink 尚未完成从 Firebase 存储的加载,这是因为您添加到 task_uri 对象的监听器将在一段未知的时间后被调用当你的任务完成后。您不知道需要多长时间,photoLink 可能需要几百毫秒到几秒的时间才能真正可用。 onSuccess() 方法具有异步行为,这就是为什么您无法以这种方式获取 photoLink

此问题的快速解决方案是将所有与向 userMap 添加数据相关的代码块移至 onSuccess() 方法内。在此期间,您正在等待回调,并且 photoLink 您将可以使用。否则我建议你看看我的答案的最后一部分 post 其中我解释了如何使用自定义回调来完成它。您还可以看看这个video 为了更好地理解。

关于java - 如何获取Uri值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57461888/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com