• Android 把从网络获取的图片缓存到内存中


    1:activity_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">
        
        <Button 
            android:id="@+id/btn_1"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button test1"/>
    
        <Button 
            android:layout_below="@id/btn_1"
            android:id="@+id/btn_2"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="Button Intent Other Activity"/>
        
        <ImageView 
            android:layout_below="@id/btn_2"
            android:id="@+id/img_view"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    
    </RelativeLayout>

    2:HttpHelper.java

    public class HttpHelper {
        //图片资源缓存
        private static Map<String,Bitmap>bitmapCache=new HashMap<String,Bitmap>();
        
        public static Bitmap getHttpBitmap(String url){
         //首先先从缓存中取数据 Bitmap bitmap
    =bitmapCache.get(url); if(bitmap!=null){
            //如果取到就直接返回
    return bitmap; } try{ URL myUrl=new URL(url); HttpURLConnection conn=(HttpURLConnection)myUrl.openConnection(); conn.setDoInput(true); conn.connect(); InputStream is=conn.getInputStream(); bitmap=BitmapFactory.decodeStream(is); is.close(); }catch(Exception e){ e.printStackTrace(); } if(bitmap!=null){
            //将获取到的图片缓存起来 bitmapCache.put(url, bitmap); }
    return bitmap; } }

    3:MainActivity.java

    public class MainActivity extends Activity {
        private Button btnTest1=null;
        private Button btnTest2=null;
        private ImageView imgView=null;
        private Bitmap bitmap=null;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            
            initUI();
            
            btnTest1.setOnClickListener(new OnClickListener(){
                public void onClick(View view){
                    new Thread(new GetImgThread()).start();
                }
            });
            
            btnTest2.setOnClickListener(new OnClickListener(){
                public void onClick(View view){
                    Intent intent=new Intent(MainActivity.this,OtherActivity.class);
                    startActivity(intent);
                }
            });
        }
    
        private void initUI(){
            btnTest1=(Button)findViewById(R.id.btn_1);
            btnTest2=(Button)findViewById(R.id.btn_2);
            imgView=(ImageView)findViewById(R.id.img_view);
        }
    
        Handler myHandler=new Handler(){
            public void handleMessage(Message msg){
                imgView.setImageBitmap(bitmap);
            }
        };
        
        class GetImgThread implements Runnable{
            public void run(){
                String url="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Hukou_Waterfall.jpg/800px-Hukou_Waterfall.jpg";
                bitmap=HttpHelper.getHttpBitmap(url);
                myHandler.obtainMessage().sendToTarget();
            }
        }
    }

    4:activity_other.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" >
    
         <Button 
             android:id="@+id/btn_get"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:text="Button Get Img"/>
         
        <ImageView 
            android:id="@+id/img_view_2"
            android:layout_below="@id/btn_get"
            android:layout_width="match_parent"
            android:layout_height="match_parent"/>
    </RelativeLayout>

    5:OtherActivity.java

    public class OtherActivity extends Activity {
        private  Bitmap bitmap=null;
        private Button btnGetImg=null;
        private ImageView imgView=null;
        
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_other);
            
            btnGetImg=(Button)findViewById(R.id.btn_get);
            imgView=(ImageView)findViewById(R.id.img_view_2);
            
            btnGetImg.setOnClickListener(new OnClickListener(){
                public void onClick(View view){
                    new Thread(new GetImgThread()).start();
                }
            });
        }
        
        Handler myHandler=new Handler(){
            public void handleMessage(Message msg){
                imgView.setImageBitmap(bitmap);
            }
        };
        
        class GetImgThread implements Runnable{
            public void run(){
                String url="http://upload.wikimedia.org/wikipedia/commons/thumb/e/ea/Hukou_Waterfall.jpg/800px-Hukou_Waterfall.jpg";
                bitmap=HttpHelper.getHttpBitmap(url);
                myHandler.obtainMessage().sendToTarget();
            }
        }
    
    }

    6:运行结果如下:

  • 相关阅读:
    浅谈HashMap的内部实现
    浅谈Java的集合体系
    如何通过注解Bean类来封装SQL插入语句
    谈一谈垃圾回收器
    万物皆对象
    关于枚举
    Servlet向客户端发送中文数据的编码情况
    "流"派家族,一脉相承
    个人简历用HTML编写
    get和post的区别
  • 原文地址:https://www.cnblogs.com/yshyee/p/3369846.html
Copyright © 2020-2023  润新知