android中ImagView显示网络图片出错

问题描述

android中ImagView显示网络图片出错

初学就是想在ImageView上放一个网络图片,这代码哪里有问题,运行后会出错退出程序,在网上找了好多,但是代码我看着是一样的,为什么不行呢
activity代码:

 package com.lk.httptest;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import android.support.v7.app.ActionBarActivity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageView;

public class MainActivity extends ActionBarActivity {

    ImageView imageView;
    Bitmap bmige;
    String imgurl = "http://c.hiphotos.baidu.com/image/pic/item/8c1001e93901213f3a7182d556e736d12f2e957d.jpg";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) findViewById(R.id.imageView);
        imageView.setImageBitmap(returnBitmap(imgurl));
    }

    public Bitmap returnBitmap(String url){
        URL myFileUrl = null;
        Bitmap bitmap = null;
        try {
            myFileUrl = new URL(url);
        } catch (MalformedURLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            URLConnection conn =  myFileUrl.openConnection();
            conn.setDoInput(true);
            conn.connect();
            InputStream is = conn.getInputStream();
            bitmap = BitmapFactory.decodeStream(is);
            is.close();    

        } catch (IOException e) {
            e.printStackTrace();
        }
        return bitmap;

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }
}

XML布局文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />
</RelativeLayout>

已经在manifest中添加了标签

解决方案

这是首先要在AppContext配置ImageLoader这个类:

 public class AppContext extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        DisplayImageOptions options = new DisplayImageOptions.Builder()
                .showStubImage(R.drawable.ic_launcher)
                .showImageForEmptyUri(R.drawable.ic_bu)
                .showImageOnFail(R.drawable.ic_bu)
                .cacheInMemory(true)
                .cacheOnDisk(true)
                // .displayer(new RoundedBitmapDisplayer(20))
                .showImageOnLoading(R.drawable.ic_bu).build();

        ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
                getApplicationContext()).defaultDisplayImageOptions(options)
                .threadPriority(Thread.NORM_PRIORITY - 2)
                .denyCacheImageMultipleSizesInMemory()
                .imageDownloader(new HttpUrlImageDownloader(this))
                .diskCacheFileNameGenerator(new Md5FileNameGenerator())
                .tasksProcessingOrder(QueueProcessingType.LIFO).build();

        ImageLoader.getInstance().init(config);
    }
}

然后通过这样的方法:ImageLoader.getInstance().displayImage(imageURL, imageView);调用就可以加载网络图片了。

解决方案二:

Android显示网络图片
Android:如何显示网络图片
如何在Android当中显示网络图片

解决方案三:

难道是你联网获取图片的时候没有开启线程?我记得在android2.3之后,在主线程联网获取数据是会报错的。

解决方案四:

你这个是有问题的,网络会阻塞UI,现在不能这样做了。

参考新方法(需要加载volley库)

http://my.oschina.net/ramboo/blog/306369

解决方案五:

现在使用Universal-ImageLoader加载网络图片,它已经将图片缓存功能封装在SDK中了,简单易用,只需要在使用前配置一下就可以了。

解决方案六:

网络请求没有另开线程,可以用handler解决!

解决方案七:

android2.3之后,谷歌就会为了保护用户体验阻止一些明显的会阻塞程序运行的行为,比如httpurlconnection的请求是会被阻止的,所以需要写个子线程来请求网络,再利用handler方式来刷新ui

时间: 2025-01-21 08:28:54

android中ImagView显示网络图片出错的相关文章

Android中listview显示界面其中一条item比另外的高

问题描述 Android中listview显示界面其中一条item比另外的高 在app开发过程中要求 listview显示页面中其中的一条item 比其他的item要高一倍 各位大牛们,提提建议 解决方案 两个不同item布局,通过重载adapter的getItemViewType,来实现布局切换 解决方案二: 写一个判断,如果某个item包含你要的值,就设置它的高度.

Android中AlertDilog显示简单和复杂列表的方法_Android

本文实例讲述了Android中AlertDialog显示简单和复杂列表的方法.分享给大家供大家参考,具体如下: AlertDialog 显示简单列表 setItems import Android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import andro

Android中TextView显示插入的图片实现方法_Android

本文实例讲述了Android中TextView显示插入的图片实现方法.分享给大家供大家参考,具体如下: Android系统默认给TextView插入图片提供了三种方式: 1.ImageSpan 2.Html.ImageGetter 3.TextView.setCompoundDrawables(left, top, right, bottom) 1.TextView使用ImageSpan显示图片 ImageSpan span = new ImageSpan(this, R.drawable.ic

Android中EditText显示明文与密码的两种方式_Android

效果图如下所述: 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pa

Android 中 Activity显示隐式跳转

安卓中经常涉及到activity的跳转,跳转怎么样在安卓中实现呢,如下. 创建第二个activity就是创建一个class,继承自Android.app.Activity. 创建第二个activity的同时需要在清单文件中配置,不然会找不到 <activity android:name="com.ldw.createActivity.SecondActivity"></activity> 入口activity有下面的代码,只要activity有下面的代码,就会创

Android中AlertDilog显示简单和复杂列表的方法

本文实例讲述了Android中AlertDialog显示简单和复杂列表的方法.分享给大家供大家参考,具体如下: AlertDialog 显示简单列表 setItems import Android.app.Activity; import android.app.AlertDialog; import android.content.DialogInterface; import android.os.Bundle; import android.os.Handler; import andro

Android中EditText显示明文与密码的两种方式

效果图如下所述: 布局 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_pa

android中的显示跳转和隐式跳转

简介 android提供了三种菜单类型,分别为options menu,context menu,sub menu. options menu就是通过按home键来显示,context menu需要在view上按上2s后显示.这两种menu都有 可以加入子菜单,子菜单不能种不能嵌套子菜单.options menu最多只能在屏幕最下面显示6个菜单选项,称 为iconmenu,icon menu不能有checkable选项.多于6的菜单项会以more icon menu来调出,称为expanded

Android中PopupWindow显示在指定位置

Android中PopupWindow位置的确定一般通过showAsDropDown函数来实现,该函数有两个重载函数,分别定义如下: public void showAsDropDown(View anchor) { showAsDropDown(anchor, 0, 0); } public void showAsDropDown(View anchor, int xoff, int yoff) { if (isShowing() || mContentView == null) { retu