java - java中无法获取图片url

标签 java android firebase firebase-realtime-database imageurl

将图像上传到 Firebase 存储后,我需要获取图像 URL。之后,图像 URL 将与其他用户数据一起添加到我的 firebase 数据库中。但是,该链接始终被视为 abc,我想知道为什么它不会被

覆盖
link = task.getResult().getStorage().getDownloadUrl().toString();

uploadImage()方法中。有人能帮我吗?

提前致谢:)

public class A extends AppCompatActivity {
    private Button btnChoose, btnUpload;
    private ImageView imageView;
    private Uri filePath;
    private final int PICK_IMAGE_REQUEST = 71;
    private DatabaseReference mDatabase;
    private String username;
    private FirebaseStorage storage;
    private StorageReference storageReference;
    private String role = "therapist";
    private FirebaseAuth mAuth;
    private String email, psd, link = "abc";
    private UploadTask upload;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.a);

        Bundle extras = getIntent().getExtras();
        if (extras != null) {
            username = extras.getString("name");
            email = extras.getString("email");
            psd = extras.getString("psd");
        }


        btnChoose = (Button) findViewById(R.id.choosedevice);
        btnUpload = (Button) findViewById(R.id.nexttothome);
        imageView = (ImageView) findViewById(R.id.viewImage);
        btnChoose.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chooseImage();
            }
        });
        btnUpload.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                uploadImage();
                Signup();
            }
        });
        compname = findViewById(R.id.compnameregister);
        adr1 = findViewById(R.id.adr1register);
        adr2 = findViewById(R.id.adr2register);


        storage = FirebaseStorage.getInstance();
        storageReference = storage.getReference();

        mDatabase = FirebaseDatabase.getInstance().getReference();
        // Initialize Firebase Auth
        mAuth = FirebaseAuth.getInstance();
    }

    private void uploadImage() {

        if (filePath != null) {
            final StorageReference ref = storageReference.child("images/" + UUID.randomUUID().toString());

            ref.putFile(filePath).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
                public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
                    if (task.isSuccessful()) {
                        Toast.makeText(RoleInfo2.this, "Your picture Saved successfully", Toast.LENGTH_SHORT).show();
                        link = task.getResult().getStorage().getDownloadUrl().toString();

                    }
                }
            });
        }
    }


    private void Signup() {
        mAuth.createUserWithEmailAndPassword(email, psd).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {

            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                try {
                    //check if successful
                    if (task.isSuccessful()) {
                        onAuthSuccess(task.getResult().getUser());
                    } else {
                        Toast.makeText(A.this, "Couldn't register, try again", Toast.LENGTH_SHORT).show();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });

    }

    private void onAuthSuccess(FirebaseUser user) {
        String compname1 = compname.getText().toString().trim();
        String adr11 = adr1.getText().toString().trim();
        String adr21 = adr2.getText().toString().trim();
        // Write new user
        sendToDatabase(user.getUid(), username, role, link, compname1, adr11, adr21);

    }

    private void sendToDatabase(String userId, String username, String role, String link, String compname1, String adr11, String adr21) {
        User thera = new User(username, role, link);
        Company comp = new Company(compname1, adr11, adr21);
        mDatabase.child("user").child(userId).setValue(thera);
        mDatabase.child("company").child(userId).setValue(comp);
    }


}

最佳答案

似乎您的 Signup() 方法在 uploadImage() 中运行的异步任务之前触发。尝试将 Signup() 放入 uploadImage() 中的 onComplete() 中。

比如,


public void onComplete(@NonNull Task<UploadTask.TaskSnapshot> task) {
    if (task.isSuccessful()) {
            Toast.makeText(RoleInfo2.this, "Your picture Saved successfully", Toast.LENGTH_SHORT).show();
            link=task.getResult().getStorage().getDownloadUrl().toString();

            Signup();
        }
    }

关于java - java中无法获取图片url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57088116/

相关文章:

android - 不同设备的授权失败(Android Google Map API v2)

android - 如何在一个 Activity 中添加两个 fragment

firebase - 如何使用Flutter更新Cloud Firestore上文档的字段?

java - 我的 JPanel 中的 GridBagLayout 不起作用

java - 转换 0xFF 给我 -1 -> 有符号与无符号?

android - Flutter:- 显示 BottomSheet 透明度

ios - 登录功能不工作..抛出错误...Firebase 和 Xcode 9

ios - Crashlytics 为混淆的应用程序手动上传 dSYM

java - 在子类中定义与父类(super class)构造函数不同的构造函数?

java - 如何使用 AJAX 使两个 JSF selectOneMenu 相互依赖?