【问题标题】:Using an AsyncTask to update a user profile image in Android在 Android 中使用 AsyncTask 更新用户配置文件图像
【发布时间】:2021-08-27 20:26:39
【问题描述】:

我的 Android 应用程序中的用户个人资料图片更新出现问题。

简介

在我的MainActivity 中,我可以在两个片段之间切换,第一个是HomeFragment,第二个是UserProfileFragment。 在 UserProfile 中,用户可以决定上传一张新图片,所以我让用户从本地存储中选择图片,然后我将这张图片上传到FirebaseStorage 并获取下载链接。 我使用一个名为LoadImageTask 的类扩展了一个AsyncTask,它从url 下载图像,然后将生成的位图上传到我在UserProfileFragment 中的ImageView

问题:

当用户上传新的个人资料图片时,LoadImageTask 会正确完成他的工作。问题是,当用户尝试更新他的头像时,ImageView 仍然显示旧图像,用户必须转到HomeFragment,然后返回UserProfileFragment 才能看到更新。因此,基本上更新工作,但个人资料图片更改不会立即显示。

我想做什么

我尝试了很多方法,例如使imageView 无效或尝试以其他方式强制imageView,但没有奏效。

public class LoadImageTask extends AsyncTask<String, Void, Bitmap> {

    private ImageView image;

    public LoadImageTask(ImageView image) {
        this. image = image;
    }

    @Override
    protected Bitmap doInBackground(String... urls) {

        String downloadUrl = urls[0];
        Bitmap bitmap = null;

        try {
            java.net.URL url = new java.net.URL(downloadUrl);
            HttpURLConnection connection = (HttpURLConnection) url
                    .openConnection();
            connection.setDoInput(true);
            connection.connect();
            InputStream input = connection.getInputStream();

            bitmap = BitmapFactory.decodeStream(input);

        } catch (IOException e) {
            e.printStackTrace();
        }

        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap result) {

        if(result != null) {
            image.setImageBitmap(circleTransformation(result));
        }
    }
    
}

【问题讨论】:

  • 如果没有任何理由反对它,您可以使用图像加载库,例如 glidepicasso

标签: java android android-studio android-asynctask


【解决方案1】:

当您从本地存储中选择图像时,您可以从 onActivityResult 中的 uri 将图像设置为 imageView。

imageView.setImageURI(imgUri);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2022-01-07
    • 2018-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多