2015-04-26 53 views
0

我在我的Android应用程序中有一个图像视图,我必须从url设置一个简单的图像。我尝试了下面的代码,但它没有设置来自url的图像。从url设置图片

try { 
     URL url = new URL("https://drive.google.com/..."); 
     HttpURLConnection connection = (HttpURLConnection)url.openConnection(); 
     connection.setDoInput(true); 
     connection.connect(); 
     InputStream stream = connection.getInputStream(); 
     Bitmap teamBmpImage = BitmapFactory.decodeStream(stream); 
     teamImgView.setImageBitmap(teamBmpImage); 
    } 
    catch (Exception e) { 

    } 

有人可以指导我做到这一点吗?

更新的代码:其中给出空指针异常

public class AboutActivity extends ActionBarActivity { 
    ImageView teamImgView; 

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

     teamImgView = (ImageView) this.findViewById(R.id.teamImageView); 
     new DownloadImageTask(teamImgView).execute("http://docs.oracle.com/javase/tutorial/2d/images/examples/strawberry.jpg"); 
    } 

    class DownloadImageTask extends AsyncTask<String, Void, Bitmap> { 
     ImageView bmImage; 

     public DownloadImageTask(ImageView bmImage) { 
      this.bmImage = bmImage; 
     } 

     @Override 
     protected void onPreExecute() { 
      // TODO Auto-generated method stub 
      super.onPreExecute(); 
      //pd.show(); 
     } 

     protected Bitmap doInBackground(String... urls) { 
      String urldisplay = urls[0]; 
      Bitmap mIcon11 = null; 
      try { 
       InputStream in = new java.net.URL(urldisplay).openStream(); 
       mIcon11 = BitmapFactory.decodeStream(in); 
      } catch (Exception e) { 
       Log.e("Error", e.getMessage()); 
       e.printStackTrace(); 
      } 
      return mIcon11; 
     } 

     @Override 
     protected void onPostExecute(Bitmap result) { 
      super.onPostExecute(result); 
      //pd.dismiss(); 
      bmImage.setImageBitmap(result); 
     } 
    } 
} 
+0

[最佳方法从Android下载图片的最佳方法]可能的重复(http://stackoverflow.com/questions/18210700/best-method-to-download-image-from-url-in-android) – Lamorak

+0

否解决方案从这个链接出来,这就是为什么创建新的问题 – Stella

+0

实际上有几个好的技巧在答案中,如果你尝试了那些你应该在你的问题中提及它并指定出了什么问题 – Lamorak

回答

2

我猜你是在MainThread,这导致了在NetworkOnMainThreadException的Android执行代码。尝试在该示例来执行你的代码异步像下面

new AsyncTask<String, Integer, Bitmap>() { 

@Override 
protected Bitmap doInBackground(String... params) { 
    try { 
     URL url = new URL(params[0]); 
     return BitmapFactory.decodeStream(url.openConnection().getInputStream()); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

@Override 
protected void onPostExecute(Bitmap bm) { 
    ImageView teamImgView = (ImageView) findViewById(R.id.teamImageView); 
    teamImgView.setImageBitmap(bm); 
} 
}.execute("https://drive.google.com/uc?...."); 
+0

这是崩溃。 – Stella

+0

您是否在清单中添加了<使用权限android:name =“android.permission.INTERNET”/>'?你可以发布你的stacktrace吗? – DonCalzone

+0

互联网许可已经存在,因为我将它用于其他目的。 – Stella

1

您可以使用Picasso libraryhere是如何做到这一点的详细教程。

这是非常简单的使用例子

Picasso.with(activityContext) 
    .load("https://drive.google.com/uc?....") 
    .placeholder(R.drawable.image_name) 
    .into(imageView);