如何获得 Uri 值?

帕贾帕蒂

我已经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从火力地堡储存未完成加载但,这是因为你已经添加到您的听众task_uri对象被你的任务完成之后,以后调用的时候一些未知量。您不知道要花多长时间,可能需要几百毫秒到几秒的时间才能photoLink真正可用。onSuccess()方法具有异步行为,这就是您无法photoLink以这种方式获得该行为的原因

快速解决此问题的方法是将所有与向 , 中添加数据相关的代码块移动到方法userMap内部onSuccess()在此您正在等待回调,photoLink您将可用。否则,我建议您从这篇文章查看我的 anwser 的最后一部分,其中我解释了如何使用自定义回调来完成。您也可以观看此视频以更好地理解。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章