为了账号安全,请及时绑定邮箱和手机立即绑定

关于网络权限,访问网络图片

下面是使用到的三个文件:

为什么显示不了图片呢?

AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

    package="com.imooc.summenudemo"

    android:versionCode="1"

    android:versionName="1.0" >

    <uses-sdk

        android:minSdkVersion="8"

        android:targetSdkVersion="18" />

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

    <application

        android:allowBackup="true"

        android:icon="@drawable/ic_launcher"

        android:label="@string/app_name"

        android:theme="@style/AppTheme" >

        <activity

            android:name="com.imooc.summenudemo.MainActivity"

            android:label="@string/app_name"

            android:theme="@android:style/Theme.Light.NoTitleBar"

             >

        <activity

            android:name="com.imooc.summenudemo.ImageActivity"

            android:label="@string/app_name"

            android:theme="@android:style/Theme.Light.NoTitleBar"

             >

            <intent-filter>

                <action android:name="android.intent.action.MAIN" />


                <category android:name="android.intent.category.LAUNCHER" />

            </intent-filter>

        </activity>

    </application>

</manifest>


image_view.xml

<LinearLayout

    xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="fill_parent"  

    android:layout_height="fill_parent"  

    android:orientation="vertical" >  

  

    <TextView  

        android:layout_width="fill_parent"  

        android:layout_height="wrap_content"  

        android:text="显示" />

    <ImageView

        android:layout_width="wrap_content"  

        android:layout_height="wrap_content"

        android:id="@+id/image" />  

</LinearLayout> 


ImageActivity.java

package com.imooc.summenudemo;

import java.io.IOException;

import java.io.InputStream;

import java.net.HttpURLConnection;

import java.net.MalformedURLException;

import java.net.URL;

import android.os.Bundle;

import android.app.Activity;

import android.graphics.Bitmap;

import android.graphics.BitmapFactory;

import android.widget.ImageView;


public class ImageActivity extends Activity {

/** Called when the activity is first created. */  

    String imageUrl = "http://content.52pk.com/files/100623/2230_102437_1_lit.jpg";    

    Bitmap bmImg;    

    ImageView imView;    

   @Override  

   public void onCreate(Bundle savedInstanceState) {  

       super.onCreate(savedInstanceState);  

       setContentView(R.layout.activity_main);  

       imView = (ImageView) findViewById(R.id.image);    

       imView.setImageBitmap(returnBitMap(imageUrl));    

   }  

   public Bitmap returnBitMap(String url){  

       URL myFileUrl = null;    

       Bitmap bitmap = null;   

       try {    

           myFileUrl = new URL(url);    

       } catch (MalformedURLException e) {    

           e.printStackTrace();    

       }    

       try {    

           HttpURLConnection conn = (HttpURLConnection) myFileUrl    

             .openConnection();    

           conn.setDoInput(true);    

           conn.connect();    

           InputStream is = conn.getInputStream();    

           bitmap = BitmapFactory.decodeStream(is);    

           is.close();    

       } catch (IOException e) {    

             e.printStackTrace();    

       }    

             return bitmap;    

   }   

}


正在回答

1 回答

网络请求属于耗时代码,在4.0以上的版本中是不能把耗时代码放在主线程中运行的。

你的returnBitMap(imageUrl)显示是耗时代码,放在主线程中所以不行。跟网络权限没关系,因为你已经打开网络权限了。


下面是我修改后的代码,只供测试使用,真实写项目还需优化。


public class MainActivity extends AppCompatActivity {

   String imageUrl = "http://content.52pk.com/files/100623/2230_102437_1_lit.jpg";

   static Bitmap bmImg;

   static ImageView imView;
   static MyHandler handler;
   @Override
   protected void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       imView = (ImageView) findViewById(R.id.imageview);
       handler = new MyHandler();
       new Thread(new Runnable() {
           @Override
           public void run() {
               bmImg = returnBitMap(imageUrl);
               handler.sendEmptyMessage(0);
           }
       }).start();

   }

   public Bitmap returnBitMap(String url){

       URL myFileUrl = null;

       Bitmap bitmap = null;

       try {

           myFileUrl = new URL(url);

       } catch (MalformedURLException e) {

           e.printStackTrace();

       }

       try {

           HttpURLConnection conn = (HttpURLConnection) myFileUrl.openConnection();

           conn.setDoInput(true);

           conn.connect();

           InputStream is = conn.getInputStream();

           bitmap = BitmapFactory.decodeStream(is);

           is.close();

       } catch (IOException e) {

           e.printStackTrace();

       }

       return bitmap;

   }

   public static class MyHandler extends Handler{
       @Override
       public void handleMessage(Message msg) {
//            super.handleMessage(msg);
           imView.setImageBitmap(bmImg);
       }
   }


}

1 回复 有任何疑惑可以回复我~
#1

NeverGiveUp7 提问者

亲,谢谢!把我的问题解决了!
2015-12-18 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第二门课(第1季)
  • 参与学习       111172    人
  • 解答问题       1457    个

本课程由浅入深地带您学会Android的常用控件的开发和使用

进入课程

关于网络权限,访问网络图片

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信