如何显示从android中的URI下载并显示位图图像?

时间:2014-10-19 12:03:13

标签: android google-maps bitmap

我刚写了这段代码:

public class MyActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_my);
    String latEiffelTower = "48.858235";
    String lngEiffelTower = "2.294571";
    String url = "http://maps.google.com/maps/api/staticmap?center=" + latEiffelTower +   "," + lngEiffelTower + "&zoom=15&size=200x200&sensor=false";
    try {
        ImageView i = (ImageView)findViewById(R.id.image);
        Bitmap bitmap = BitmapFactory.decodeStream((InputStream) new URL(url).getContent());
        i.setImageBitmap(bitmap);
    } catch (MalformedURLException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

然后我想从google静态地图下载一个静态图像位图,在imageview上下载,但是当我运行它时我的程序会停止,如何在此代码中显示此位图图像?我是否使用任何特殊权限或其他什么?

这是我的main.xml

 RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:paddingLeft="@dimen/activity_horizontal_margin"
 android:paddingRight="@dimen/activity_horizontal_margin"
 android:paddingTop="@dimen/activity_vertical_margin"
 android:paddingBottom="@dimen/activity_vertical_margin"
 tools:context=".MyActivity">

 <TextView
    android:text="@string/hello_world"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
 <ImageView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:id="@+id/image"/>

 </RelativeLayout>

3 个答案:

答案 0 :(得分:0)

使用Universal Image Loader模块。它可以在https://github.com/nostra13/Android-Universal-Image-Loader

找到
public class WebImageLoader {
    DisplayImageOptions options;
    ImageLoader imageLoader;

    public WebImageLoader(Context context) {

        options = new DisplayImageOptions.Builder()
                .showImageOnLoading( context.getResources().getDrawable(R.drawable.ic_stub) )
                .showImageForEmptyUri(context.getResources().getDrawable(R.drawable.ic_empty))
                .showImageOnFail(context.getResources().getDrawable(R.drawable.ic_error))
                .cacheInMemory(false)
                .cacheOnDisk(true)
                .considerExifParams(true)
                .build();

        imageLoader = ImageLoader.getInstance();
        if (!imageLoader.isInited()) {
            imageLoader.init(ImageLoaderConfiguration.createDefault(context));
        }
    }

    public void displayImage(ImageView imageView,String imageURL) {
        try {
            imageLoader.displayImage(imageURL, imageView, options);
        }
        catch (Exception e) {
            //Handle the exception
        }
    }
 }

使用它

WebImageLoader imageLoader = new WebImageLoader(context);
ImageView imgProductImage = (ImageView) findViewById(R.id.imgProductImage);
imageLoader.displayImage(imgProductImage,url);

谢谢, Noorul

答案 1 :(得分:0)

我建议使用volley,你的程序会停止,因为你不能在android主线程上运行网络代码,因为它保留了UI任务

答案 2 :(得分:-1)

您只需使用 Picasso 下载图片即可:

String latEiffelTower = "48.858235";
String lngEiffelTower = "2.294571";
String url = "http://maps.google.com/maps/api/staticmap?center=" + latEiffelTower +   "," + lngEiffelTower + "&zoom=15&size=200x200&sensor=false";
ImageView i = (ImageView)findViewById(R.id.image);

Picasso.with(MainActivity.this).load(url).into(i);

有关详细信息,请访问Picasso