您的位置:首页 > 理论基础 > 计算机网络

Android中获取网络图片的方法(如果手机缓存里面有就从缓存获取)

2011-12-30 11:15 691 查看
最近工作比较闲,除了用公司的imac机学学iphone外,有必要对以前的项目里面的难点进行一下总结了,对于Android开发中的难点,一是网络获取内容的处理,二是UI设计方面。对于我来说,特别麻烦就是UI设计方面的东西,公司的开发以iphone为主,毕竟香港人的iphone普及比较高(销售价格好像是全球最低的),为了模仿iphone的Tabbar,用TabActivity+ActivityGroup的处理方式不知道出了多少问题了,还好都一一解决了。

   获取网络图片的方法(如果手机缓存里面有就从缓存获取),我以前写的,比较原始:

Java代码  


ImageView mImageView = (ImageView)this.findViewById(R.id.imageview);  
String imagePath = getImagePath(context, photoURL); // context:上下文 ,photoURL:图片的url路径  
mImageView.setImageBitmap(BitmapFactory.decodeFile(imagePath));  

getImagePath()方法:

Java代码  


// 获取网络图片,如果缓存里面有就从缓存里面获取  
public static  String getImagePath(Context context, String url) {  
    if(url == null )  
        return "";  
    String imagePath = "";  
    String   fileName   = "";  
          
    // 获取url中图片的文件名与后缀  
    if(url!=null&&url.length()!=0){   
        fileName  = url.substring(url.lastIndexOf("/")+1);  
    }  
      
    // 图片在手机本地的存放路径,注意:fileName为空的情况  
    imagePath = context.getCacheDir() + "/" + fileName;  
    Log.i(TAG,"imagePath = " + imagePath);  
    File file = new File(context.getCacheDir(),fileName);// 保存文件,  
    if(!file.exists())  
    {  
        Log.i(TAG, "file 不存在 ");  
        try {  
            byte[] data =  readInputStream(getRequest(url));  
            Bitmap bitmap = BitmapFactory.decodeByteArray(data, 0,  
                    data.length);  
              
            bitmap.compress(CompressFormat.JPEG, 100, new FileOutputStream(  
                    file));  
              
            imagePath = file.getAbsolutePath();  
            Log.i(TAG,"imagePath : file.getAbsolutePath() = " +  imagePath);  
              
        } catch (Exception e) {  
            Log.e(TAG, e.toString());  
        }  
    }  
    return imagePath;  
} // getImagePath( )结束。  

getRequest( ) 方法:网络获取图片为输入了

Java代码  


public static InputStream getRequest(String path) throws Exception{       
    URL url = new URL(path);  
        HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
        conn.setRequestMethod("GET");  
        conn.setConnectTimeout(5000); // 5秒  
        if(conn.getResponseCode() == 200){  
            return conn.getInputStream();  
        }  
    return null;  
  
}  



readInputStream( ) 方法:把输入流转化成二进制


Java代码  


public static byte[] readInputStream(InputStream inStream) throws Exception{  
        ByteArrayOutputStream outSteam = new ByteArrayOutputStream();  
        byte[] buffer = new byte[4096];  
        int len = 0;  
        while( (len = inStream.read(buffer)) != -1 ){  
            outSteam.write(buffer, 0, len);  
        }  
        outSteam.close();  
        inStream.close();  
        return outSteam.toByteArray();  
}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐