android imageview加载网络图片无图片

问题描述

android imageview加载网络图片无图片

MainActivity.java

 package study_imageput.com.study_apktointent;

        import android.app.Activity;
        import android.graphics.Bitmap;
        import android.graphics.BitmapFactory;
        import android.os.Bundle;
        import android.widget.ImageView;

        import java.io.InputStream;
        import java.net.HttpURLConnection;
        import java.net.URL;

public class MainActivity extends Activity {
    //定义一个图片显示控件
    private ImageView imageView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = (ImageView) this.findViewById(R.id.ivPic);
                String url = "http://images.cnitblog.com/blog/430074/201302/01220037-4e6a57c1199748fea9f8391e7e0548d7.jpg";
                setPicBitmap(imageView, url);

    }

    public static void setPicBitmap(final ImageView ivPic,final String pic_url){

        new Thread(new Runnable() {
            @Override
            public void run() {
                try{
                    HttpURLConnection conn = (HttpURLConnection) new URL(pic_url).openConnection();
                    conn.connect();
                    InputStream is = conn.getInputStream();
                    Bitmap bitmap =BitmapFactory.decodeStream(is);
                    ivPic.setImageBitmap(bitmap);
                    is.close();
                } catch (Exception e){
                    e.printStackTrace();
                }
            }
        });
    }
}

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/button1"
        android:text="加载图片"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/ivPic"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:src="#dc0000"/>
</LinearLayout>

AndroidMainfest.xml

 <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="study_imageput.com.study_apktointent">

    <uses-permission android:name="android.permission.INTERNET" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>

最后显示结果就是白屏,如果之前设置了imageview的默认图片,加载之后就会变成白色

解决方案

你这个得用异步来做吧,我最近写了一个异步获取图片的Demo,主要部分是这么写的:

 public class MainActivity extends Activity implements OnClickListener {

    private ImageView iv;
    private Button downloadButton;
    private TextView tv_show;
    private RotatingDoughnut rotatingDoughnut;
    private static final String IMG_PATH = "http://img.my.csdn.net/uploads/201604/06/1459922240_8285.jpg";
    private static final int MSG_SUCCESS = 0;
    private static final int MSG_FAILURE = 1;
    private static final int MSG_START_LOADING = 3;
    private static final int MSG_FINISH_LOADING = 4;
    private DownloadThread downloadThread;
    private Bitmap bitmap = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        iv = (ImageView) findViewById(R.id.iv);
        tv_show = (TextView) findViewById(R.id.tv_show);
        rotatingDoughnut = (RotatingDoughnut) findViewById(R.id.progressBar);
        downloadButton = (Button) findViewById(R.id.btn_download);
        downloadButton.setOnClickListener(this);
    } 

    private Handler mHandler = new Handler() {
        public void handleMessage(Message msg) { 

            switch (msg.what) {
                case MSG_SUCCESS:
                    rotatingDoughnut.setVisibility(View.INVISIBLE);
                    iv.setImageBitmap(bitmap);
                    downloadButton.setText("Success");
                    downloadButton.setEnabled(false);
                    break;
                case MSG_FAILURE:
                    Toast.makeText(getApplicationContext(), "获取图片失败", Toast.LENGTH_SHORT).show();
                    downloadButton.setText("Failure");
                    downloadButton.setEnabled(false);
                    break;
                case MSG_START_LOADING:
                    rotatingDoughnut.doughnutRotating();
                default:
                    break;
            }
        } 

        ; 

    }; 

    private class DownloadThread extends Thread {
        HttpURLConnection coon;
        InputStream inputStream;

        @Override
        public void run() {
            try {
                URL url = new URL(IMG_PATH);
                if (url != null) {
                    coon = (HttpURLConnection) url.openConnection();
                    coon.setConnectTimeout(2000);
                    coon.setDoInput(true);
                    coon.setRequestMethod("GET");
                    coon.connect();
                    if (coon.getResponseCode() == 200) {
                        inputStream = coon.getInputStream();
                        bitmap = BitmapFactory.decodeStream(inputStream);
                        mHandler.obtainMessage(MSG_SUCCESS).sendToTarget();
                    } else {
                        mHandler.obtainMessage(MSG_FAILURE).sendToTarget();
                    }
                } 

            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            super.run();
        } 

    } 

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btn_download:
                iv.setImageBitmap(null);
                downloadThread = new DownloadThread();
                if (!isConnectingToInternet()) {
                    Toast.makeText(getApplicationContext(), "未检测到网络", Toast.LENGTH_SHORT).show();
                } else {
                    tv_show.setVisibility(View.GONE);
                    rotatingDoughnut.setVisibility(View.VISIBLE);
                    mHandler.obtainMessage(MSG_START_LOADING).sendToTarget();
                    mHandler.postDelayed(new Runnable() {
                        @Override
                        public void run() {
                            downloadThread.start();
                        }
                    }, 2500);
                }
                break;
            default:
                break;
        } 

    } 

    /**
     * 检测网络状态
     *
     * @return
     */
    public boolean isConnectingToInternet() {
        ConnectivityManager connectivity = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
        if (connectivity != null) {
            NetworkInfo[] info = connectivity.getAllNetworkInfo();
            if (info != null)
                for (int i = 0; i < info.length; i++)
                    if (info[i].getState() == NetworkInfo.State.CONNECTED) {
                        return true;
                    } 

        }
        return false;
    } 

}

你参考参考

解决方案二:

android使用ImageView加载本地SdCard图片和加载网络图片
android使用ImageView加载本地SdCard图片和加载网络图片
Android - 小功能 使用ImageView加载本地SdCard图片和加载网络图片

解决方案三:

图片的话 目前我是用ImageLoader做的 效果还不错 你可以试试

解决方案四:

是不是被android:src="#dc0000"挡住了?

解决方案五:

图片下载显示要异步操作。
并且只能在UI线程中才能操作UI

时间: 2024-12-10 11:22:47

android imageview加载网络图片无图片的相关文章

利用LruCache和DiskLruCache加载网络图片实现图片瀑布流效果(升级版)

MainActivity如下: package cc.patience7; import android.os.Bundle; import android.app.Activity; /** * Demo描述: * 采用瀑布流的形式加载大量网络图片 * 详细分析参见WaterfallScrollView * * 更新说明: * 在原本的的基础上添加了本地缓存DiskLruCache * * 所以在该示例中对于图片的缓存采用了:LruCache + DiskLruCache 的技术 * * 参考

利用LruCache加载网络图片实现图片瀑布流效果(基础版)

PS: 2015年1月20日21:37:27 关于LoadImageAsyncTask和checkAllImageViewVisibility可能有点小bug 修改后的代码请参见升级版本的代码 http://blog.csdn.net/lfdfhl/article/details/42925193 MainActivity如下: package cc.patience3; import android.os.Bundle; import android.app.Activity; /** * D

利用LruCache加载网络图片实现图片瀑布流效果(改进版)

PS: 2015年1月20日21:37:27 关于LoadImageAsyncTask和checkAllImageViewVisibility可能有点小bug 修改后的代码请参见升级版本的代码 http://blog.csdn.net/lfdfhl/article/details/42925193 MainActivity如下: package cc.patience4; import cc.patience4.R; import android.os.Bundle; import androi

android关于加载 2049*1376 图片问题

问题描述 android关于加载 2049*1376 图片问题 <?xml version="1.0" encoding="utf-8"?> android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" android:background="@

Android异步加载数据和图片的保存思路详解_Android

把从网络获取的图片数据保存在SD卡上, 先把权限都加上 网络权限 android.permission.INTERNET SD卡读写权限 android.permission.MOUNT_UNMOUNT_FILESYSTEMS android.permission.WRITE_EXTERNAL_STORAGE 总体布局 写界面,使用ListView,创建条目的布局文件,水平摆放的ImageView TextView 在activity中获取到ListView对象,调用setAdapter()方法

新浪微博-Android加载网络GIF图片

问题描述 Android加载网络GIF图片 我用URLConnection加载网络的GIF图片,然后播放,图片大小在3M-5M左右,第一次加载的时候,要花费30-40秒左右,但我观察新浪微博的GIF加载比较快, 基本10秒左右就完成的,保存原图后,图片也在4M左右,想问一下,是怎么实现的?都是第一次加载,缓存中还没有 解决方案 Android 加载.gif格式图片Android ListView加载网络数据和图片android listview加载网络图片 解决方案二: 建议你用Glide,Go

Android使用控件ImageView加载图片的方法_Android

在 Android 加载图片一般使用 ImageView,这里简单记录一下这个控件的使用方法. 最简单就是在 xml 里直接使用 ImageView 标签: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="

Android实现Listview异步加载网络图片并动态更新的方法_Android

本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法.分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片.店名.活动详情.地址.电话和距离等. 在布局文件中ListView的定义: <ListView android:id="@id/maplistview" android:background="@drawable/bg" android:layout_width=&qu

Android实现Listview异步加载网络图片并动态更新的方法

本文实例讲述了Android实现Listview异步加载网络图片并动态更新的方法.分享给大家供大家参考,具体如下: 应用实例:解析后台返回的数据,把每条都显示在ListView中,包括活动图片.店名.活动详情.地址.电话和距离等. 在布局文件中ListView的定义: <ListView android:id="@id/maplistview" android:background="@drawable/bg" android:layout_width=&qu