缓存图片

public class MainActivity extends Activity {

   Handler handler = new Handler() {

      public void handleMessage(Message msg) {

         switch (msg.what) {   

           case 1:     

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

             // 设置一个位图的方法    

             iv.setImageBitmap((Bitmap) msg.obj);    

             break;

             case 2:     

             Toast.makeText(MainActivity.this, "请求超时", 1).show();   

               break;

           }

        };

   };

     @Override  

    protected void onCreate(Bundle savedInstanceState) {   

        super.onCreate(savedInstanceState);   

        setContentView(R.layout.activity_main);

     }

     public void on(View view) {

        final String path = "http://192.168.1.10:8080/Image/meinv.jpg";  

        final File file=new File(getCacheDir(),filename(path));   

        //判断是否有缓存   if(file.exists()){

          System.out.println("从缓存获取");    

       //获取本地图片的地址

         Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());  

          // 创建一个消息对象   

       Message msg = new Message();   

         // 要在消息处理器里使用的变量

        msg.obj = bitmap;   

        // 消息的状态   

      msg.what = 1;  

       // 发送消息    

       handler.sendMessage(msg);  

    }else{

         Thread t = new Thread() {    

         public void run() {  

          System.out.println("从网络获取");   

          try {

                // 获取网络地址       

            URL url = new URL(path);

                 // 创建链接      

             HttpURLConnection conn = (HttpURLConnection)

             url.openConnection();

                   // 设置请求方式    

              conn.setRequestMethod("GET");    

              // 设置链接超时    

              conn.setConnectTimeout(8000);   

              // 设置读取超时     

             conn.setReadTimeout(8000);   

                 // 提交请求     

             conn.connect();   

                // 判断请求码     

      if (conn.getResponseCode() == 200) {  

               // 获取服务器传来流        

           InputStream in = conn.getInputStream();   

               //添加缓存       

           byte[]  b=new byte[1024];  

               int len;      

             FileOutputStream fos=new FileOutputStream(file);    

          while ((len=in.read(b))!=-1) {     

             fos.write(b, 0, len);   

          }       

     fos.close();   

         // 把图片封装在bitemap里    

         //Bitmap bitmap = BitmapFactory.decodeStream(in);   

        //获取本地缓存图片地址       

      Bitmap bitmap = BitmapFactory.decodeFile(file.getAbsolutePath());  

         // 创建一个消息对象       

     Message msg = new Message();  

         // 要在消息处理器里使用的变量      

      msg.obj = bitmap;      

     // 消息的状态       

    msg.what = 1;    

       // 发送消息       

     handler.sendMessage(msg);

      } else {   

        // 发送空消息,不过要传一个消息状态给他  

         handler.obtainMessage(2);     

      }

     } catch (Exception e) {    

   // TODO Auto-generated catch block     

  e.printStackTrace();    

        }

        };   

     };   

     t.start();  

   }    

}  

 

   

  //获取图片名称的方法

   public String filename(String path){

   //获取"/"号后面的图片名称  

   int index=path.lastIndexOf("/");   

   //把图片名称坐标转换成String类型,并返回  

   return path.substring(index);

   }

}

转载于:https://www.cnblogs.com/Andmin/p/5065314.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值