首页 > 解决方案 > 如何从覆盖方法java调用值?

问题描述

我如何从覆盖方法中获取价值?

这是我的代码,我厌倦了设置 urlsetValue(url)但我无法获得

String url =dlUri.toString(); this value

child("downloadurl").setValue(url);

在此处输入图像描述

public void upload(View view){

    UUID uuidImage = UUID.randomUUID();

    String imageName = "images/"+uuidImage+".jpg";

    final StorageReference storageReference = mStorageRef.child(imageName);

    storageReference.putFile(selected).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {



        @SuppressWarnings("VisibleForTests")
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {


            UUID uuid = UUID.randomUUID();
            final String uuidString = uuid.toString();

            storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
                @Override
                public void onSuccess(Uri uri) {
                    Uri dlUri = uri;
                    String url =dlUri.toString();
                }
            });

            FirebaseUser user = mAuth.getCurrentUser();
            String userEmail = user.getEmail().toString();
            String userComment = commentText.getText().toString();


            myRef.child("Posts").child(uuidString).child("useremail").setValue(userEmail);
            myRef.child("Posts").child(uuidString).child("comment").setValue(userComment);
            myRef.child("Posts").child(uuidString).child("downloadurl").setValue(url);




            Toast.makeText(getApplicationContext(),"Post Shared",Toast.LENGTH_LONG).show();

            Intent intent = new Intent(getApplicationContext(), FeedActivity.class);
            startActivity(intent);

        }
    }).addOnFailureListener(new OnFailureListener() {
        @Override
        public void onFailure(@NonNull Exception e) {
            Toast.makeText(getApplicationContext(), e.getLocalizedMessage(),Toast.LENGTH_LONG).show();
        }
    });

}

标签: javaandroidfirebase-realtime-database

解决方案


这是因为String url = dlUri.toString();不在您要访问的范围内。你为什么不把你所有的代码都移到里面onSuccess(),因为我假设你无论如何都需要等待这个值?


推荐阅读