当前位置: 首页 > 知识库问答 >
问题:

如何从gallery上传和保存图像。startActivityForResult已弃用

蔡弘扬
2023-03-14

我目前正在学习如何在java中使用android studio,并试图制作一个社交媒体应用程序。我目前正在创建一个编辑个人资料页面,用户可以在其中更新他们的详细信息并上传个人资料图片。

我一直在网上学习教程,我遇到的所有教程都使用starActivityForResult方法。它已经被划掉,不会调用该方法,因为它已被弃用。但是我不知道该用什么来代替。

`ProfileImage。setOnClickListener(新建视图。OnClickListener(){@Override公共无效onClick(视图视图){//open gallery

            Intent OpenGalleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(OpenGalleryIntent, 1000);
        }
    });
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @androidx.annotation.Nullable Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == 1000){
        if(resultCode == Activity.RESULT_OK){
            Uri imageUri = data.getData();
            ProfileImage.setImageURI(imageUri);
            UploadImageToFirebase(imageUri);
        }
    }
}
private void UploadImageToFirebase(Uri image){
    StorageReference fileRef = storageReference.child("Profile.jpg");
    fileRef.putFile(image).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
        @Override
        public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
            Toast.makeText(Edit_Profile.this, "Image Uploaded", Toast.LENGTH_SHORT).show();
        }
    });![enter image description here](https://i.stack.imgur.com/padRc.jpg)`

我知道有一个替代方案,但我不明白它是如何工作的。

共有2个答案

步嘉德
2023-03-14

startActivityForResult在更高版本的AndroidX活动和片段API中确实不受欢迎(尽管有警告,但我相信您仍然可以使用它)。从活动中获取结果的新方法是registerForActivityResult

在您的代码中,您需要创建一个启动器,它将处理结果(选定的图像)

private final ActivityResultLauncher<Intent> launcher = registerForActivityResult(
            new ActivityResultContracts.StartActivityForResult(),
            result -> {
                if (result.getResultCode() == Activity.RESULT_OK 
                       && result.getData() != null) {
                    Uri photoUri = result.getData().getData();
                    //use photoUri here
                }
            }
    );

然后在onClickListener中启动此启动器

profileImage.setOnClickListener(view -> {
            Intent intent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
            launcher.launch(intent);
        });
狄富
2023-03-14

是startActivityForeResult已弃用。

现在您可以使用ActivityResultLauncher进行回调

https://developer.android.com/training/basics/intents/result#java

 类似资料:
  • 我用这个很久了,这个方法现在不推荐了吗?

  • 我的应用程序(Android 4.4.4)中嵌入的webview有问题。在一个页面上有一个“上传图像”按钮,我用openFileChooser管理它。 在某些设备上,当我点击webview中的“上传图像”按钮时,摄像头应用程序启动,我的应用程序被销毁。拍照后,我的应用程序被重新创建,我恢复webview状态(保存在)并调用

  • 我正在尝试使用webview上传图像。一切正常,如预期的那样,但只有图像没有上传,当照片从相机中点击时。请帮我找到这个。我得到了一些答案,但没有帮助或没有回答,就像这个没有回答一样,这对我没有帮助,这是直接打开画廊,不适用于相机,这个没有帮助我 这是我的活动代码

  • 问题内容: 我一直在寻找这个东西,对我没有任何帮助。 我正在尝试将图像从android应用上传到java servlet并将其保存在服务器中。我发现的每个解决方案都不适合我。 我的代码当前正在执行的操作:android应用程序正在将图像发送到servlet,当我尝试保存该图像时,该文件已创建,但它是空的:( 谢谢你的帮助! 我在android客户端中的代码(i_file是设备上的文件位置): 我在

  • 问题内容: 我正在寻找将图像(文件)上传和存储到GAE(java)的最简单方法。搜寻数小时,没有任何简单明确的结果。 找到了此链接。 但是我仍然不知道如何存储图像以及如何检索图像。我在寻找简单的servlet示例。 问题答案: 您提供的链接“我如何处理文件上传到我的应用程序?” 解释了如何上传图像。 要托管图像,您需要使用数据存储服务来存储和提供图像以及其他数据。 这是示例代码。它是一个草图,用于

  • 问题内容: 我必须使用JavaScript创建一个表单,用户将上载JPG文件并与其他信息(例如名称,电子邮件等)一起提交。当用户单击提交时,表单中的所有信息将被加载到值对象中。对于图像文件,我将其设置为。 所以假设: 我还设置了一个servlet来处理提交,但是我不确定如何开始。上传如何进行?用户提交时,如何获取图像信息?这是屏幕截图:http : //imageshack.us/f/32/776