2014-06-10 114 views
0

我想从一个URL获取JPEG并将其放置在我的Android应用程序的图像视图中。我正在使用将URL中的图像变成可绘制的方法。然而,图像显示不出来,图像视图仅仅是空白图像不显示在Android应用程序

这里是链接到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)); 
} 
+0

如果您还没有,请引用日志或进行调试,以确保您没有在'LoadImageFromWebOperations'中获得异常。另外,如果你使用本地的东西(比如制作自己的drawable)来确保没有布局问题,那么确保你能够看到ImageView。 – Jakar

回答

0

我会使用的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);    
      }   
    } 
+0

对不起,即时通讯此初学者。这是否是正确的实施? – user3366580

+0

LoadPictureAsyncTask async = new LoadPictureAsyncTask(this,profilePhoto); async.doInBackground(); – user3366580

+0

我没有看到你写的前两行代码。完美的作品!谢谢! – user3366580

1

我建议使用Picasso来代替。

对于毕加索来说,它只是一行代码,用于将图像从URL加载到ImageView中。

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

你知道我将如何实施毕加索?它看起来非常有用,但我不知道如何将其放入我的项目中。谢谢 – user3366580

+0

如果你正在使用gradle,只需在build.gradle 编译'com.squareup.picasso:picasso:2.3.2' – vmagro

0

我建议你加载它在一个位图:

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); 
+0

将依此部分添加到依赖项部分我曾尝试使用位图方法,但应用程序崩溃。你有一个想法,为什么会发生? – user3366580

+1

您可能在UI线程上做了太多工作,您可以创建一个Asynctask,像@El_Mochiq建议 – raybaybay

相关问题