【问题标题】:Image not showing on Android App图像未显示在 Android 应用程序上
【发布时间】:2014-07-31 20:59:33
【问题描述】:

我正在尝试从 url 获取 jpeg 并将其放置在我的 android 应用程序的图像视图中。我正在使用一种将图像从 url 转换为 drawable 的方法。但是,图像没有显示出来,图像视图只是空白

这是 jpeg 的链接:http://upload.wikimedia.org/wikipedia/commons/5/57/PT05_ubt.jpeg

方法:

public static Drawable LoadImageFromWebOperations(String url) {
    try {
        InputStream is = (InputStream) new URL(url).getContent();
        Drawable d = Drawable.createFromStream(is, "src name");
        return d;
    } catch (Exception e) {
        return null;
    }
}

主要功能:

public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState == null) {
        getSupportFragmentManager().beginTransaction()
                .add(R.id.container, new PlaceholderFragment())
                .commit();
    }
    ImageView profilePhoto = (ImageView)findViewById(R.id.personImage);

    String url = "http://upload.wikimedia.org/wikipedia/commons/5/57/PT05_ubt.jpeg";

    profilePhoto.setImageDrawable(LoadImageFromWebOperations(url));
}

【问题讨论】:

  • 如果您还没有,请输入日志或调试它以确保您没有在LoadImageFromWebOperations 中收到异常。此外,如果您使用本地的东西(例如,制作自己的可绘制对象),请确保您能够看到 ImageView,以确保没有一些布局问题。

标签: java android image


【解决方案1】:

我会使用 AsyncTask,因为您必须连接到互联网才能获取图像:

所以把它放在你的活动中:

ImageView profilePhoto = (ImageView)findViewById(R.id.personImage);
 new LoadPictureAsyncTask(MainActivity.this, profilePhoto).execute();

并添加这个子类:

public class LoadPictureAsyncTask extends AsyncTask<Void, Void, Bitmap> {       
    private Context context;        
    private ImageView myProfPic;        

    public LoadPictureAsyncTask(Context mycontext,ImageView ProfPic){
        this.context = mycontext;           
        this.myProfPic = ProfPic;
    }

    @Override
    protected void onCancelled() {
        super.onCancelled();
    }

    @Override
    protected void onPreExecute()
    {       }

    @Override
    protected Bitmap doInBackground(Void... params) {
        Bitmap bitmap;
        try
        {

        URL imageURL = new URL("http://upload.wikimedia.org/wikipedia/commons/5/57/PT05_ubt.jpeg");
            bitmap = BitmapFactory.decodeStream(imageURL.openConnection().getInputStream());
        }catch(Exception ex)
        {
             bitmap = null;
        }                               

        return bitmap;
    }

    @Override
    protected void onPostExecute(Bitmap result)
    {                   
        if(result!=null)
            {                               
                myProfPic.setImageBitmap(result);               
            }           
    }

【讨论】:

  • 对不起,我是初学者。这会是正确的实现吗?
  • LoadPictureAsyncTask async = new LoadPictureAsyncTask(this,profilePhoto); async.doInBackground();
  • 我没有看到你写的前两行代码。完美运行!谢谢!
  • 对不起,他们不在那里,我更新了,很高兴能提供帮助!
【解决方案2】:

我建议您将其加载到位图中:

URL url = new URL("http://upload.wikimedia.org/wikipedia/commons/5/57/PT05_ubt.jpeg");
Bitmap bit = BitmapFactory.decodeStream(url.openConnection().getInputStream());
profilePhoto.setImageBitmap(bit);

【讨论】:

  • 我之前尝试过使用位图方法,但是应用程序崩溃了。你知道为什么会这样吗?
  • 你可能在 UI 线程上做了太多工作,你可以像 @El_Mochiq 建议的那样创建一个 Asynctask
【解决方案3】:

我建议改用Picasso

使用 Picasso,只需一行代码即可将图像从 URL 加载到 ImageView 中。

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

【讨论】:

  • 你知道我将如何实现毕加索吗?它看起来真的很有用,但我不知道如何将它放在我的项目中。谢谢
  • 如果您使用的是 gradle,只需将此行添加到 build.gradle compile 'com.squareup.picasso:picasso:2.3.2' 中的依赖项部分
猜你喜欢
  • 2012-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-15
  • 2015-07-08
  • 2018-07-15
  • 2014-02-08
  • 2018-02-02
相关资源
最近更新 更多