【问题标题】:cannot get bitmap from google profile picture url无法从谷歌个人资料图片网址获取位图
【发布时间】:2017-04-08 16:00:46
【问题描述】:

我有一个应用程序,我试图从我通过谷歌集成获得的链接中检索图像。但是,每当我尝试将图片放入位图中时,它总是会给我一个错误。代码和错误如下:

代码:

if (google_user_gallery_pic.isEmpty() == true)
{
    if (google_user_pic.isEmpty() == false)
    {
        onPost = null;
        onPost2 = null;
        onPost = getBitmapFromURL(google_user_pic);
        onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
    }

    else
    {
        onPost = null;
        onPost2 = null;
        onPost = BitmapFactory.decodeFile(google_user_gallery_pic);
        if (onPost == null)
        {
            onPost2 = BitmapFactory.decodeResource(getResources(), R.drawable.the_smallperson);
        }

        else
        {
            onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
        }
    }
}

else
{
    onPost = null;
    onPost2 = null;
    onPost = BitmapFactory.decodeFile(google_user_gallery_pic);
    if (onPost == null)
    {
        onPost2 = BitmapFactory.decodeResource(getResources(), R.drawable.the_smallperson);
        //onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
    }

    else
    {
        onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
    }
}

错误:

E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: https:/lh3.googleusercontent.com/-HW5Tk9h1V2I/AAAAAAAAAAI/AAAAAAAADA8/7UbMeHbyFLM/photo.jpg: open failed: ENOENT (No such file or directory)

网址:

https://lh3.googleusercontent.com/-HW5Tk9h1V2I/AAAAAAAAAAI/AAAAAAAADA8/7UbMeHbyFLM/photo.jpg

此网址在一个页面上有效,但在另一个页面上无效。两个页面都是片段活动。任何帮助将不胜感激,谢谢!

【问题讨论】:

  • 为什么不用毕加索?
  • @rafsanahmad007 知道如何使用它
  • 您是否将位图保存在文件中...并尝试打开它?
  • @rafsanahmad007 实际上我将它存储在数据库中并从那里检索它。所以你可以说,是的
  • 如果您在 marsmallow (Sdk >23) 上进行测试,您需要运行时权限才能保存和检索文件...也在清单 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

标签: android bitmap android-bitmap bitmapfactory


【解决方案1】:

尝试将 if 和 else 条件颠倒成这样:

if (google_user_gallery_pic.isEmpty() == false)
{
    if (google_user_pic.isEmpty() == false)
    {
        onPost = null;
        onPost2 = null;
        onPost = getBitmapFromURL(google_user_pic);
        onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
    }

    else
    {
        onPost = null;
        onPost2 = null;
        onPost = BitmapFactory.decodeFile(google_user_gallery_pic);
        if (onPost == null)
        {
            onPost2 = BitmapFactory.decodeResource(getResources(), R.drawable.the_smallperson);
        }

        else
        {
            onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
        }
    }
}

else
{
    onPost = null;
    onPost2 = null;
    onPost = BitmapFactory.decodeFile(google_user_gallery_pic);
    if (onPost == null)
    {
        onPost2 = BitmapFactory.decodeResource(getResources(), R.drawable.the_smallperson);
        //onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
    }

    else
    {
        onPost2 = onPost2.createScaledBitmap(onPost, 100, 100, false);
    }
}

因为给定了权限和其他任何东西而不是这段代码sn-p,所以除了这个之外没有任何问题

【讨论】:

    【解决方案2】:

    尝试使用 picasso 从 URL 加载图像位图。

     private Target mTarget;   //declare variable
    
    void loadImage(Context context, String url) {
    
        final ImageView imageView = (ImageView) findViewById(R.id.image);
    
        mTarget = new Target() {
            @Override
            public void onBitmapLoaded (final Bitmap bitmap, Picasso.LoadedFrom from){
                //Do something on the bitmap
                imageView.setImageBitmap(bitmap); //set the bitmap
            }
    
            @Override
            public void onBitmapFailed(Drawable errorDrawable) {
    
            }
    
            @Override
            public void onPrepareLoad(Drawable placeHolderDrawable) {
    
            }
        };
    
        Picasso.with(context)
                .load(url)
                .into(mTarget);
                ..error(R.drawable.the_smallperson) // will be displayed if the image cannot be loaded
    }
    

    在 gradle 中添加:

    compile 'com.squareup.picasso:picasso:2.5.2'
    

    【讨论】:

    • 是的,你需要导入它..在你添加 gradle 之后
    • 我认为逻辑有问题,因为根据 Saim 的回答,当我颠倒条件时它确实工作了一段时间......
    • 它实际上并没有给我实际的输出ofcourse,但它工作了一段时间
    猜你喜欢
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 2020-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多