Android链接服务器获取图片在此提供三种方法,已通过验证,无误。 方法一: public static Bitmap getImage(String path){ try { HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod(GET); System.out.println(tdw1); if(conn.getResponse 在Android应用开发中,从服务器获取并显示图片是一项常见的任务。本文将详细介绍三种已被验证有效的方法,以便在Android中读取服务器上的图片。 方法一:使用`HttpURLConnection` 这种方法是基于Java内置的`HttpURLConnection`类来实现的。首先创建一个URL对象,然后通过它建立与服务器的连接。设置超时时间、请求方法为GET,并检查响应码是否为200(表示成功)。如果响应码为200,从连接中获取输入流,然后使用`BitmapFactory.decodeStream()`方法将输入流转换为Bitmap对象。可以将Bitmap对象设置到ImageView中展示。这种方法的优点是直接从网络获取数据,但缺点是每次请求都会消耗网络资源。 ```java public static Bitmap getImage(String path){ try { HttpURLConnection conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if(conn.getResponseCode() == 200){ InputStream inputStream = conn.getInputStream(); Bitmap bitmap = BitmapFactory.decodeStream(inputStream); return bitmap; } } catch (Exception e) { e.printStackTrace(); } return null; } ``` 方法二:使用`HttpClient`与`HttpGet` 第二种方法是使用Apache的`HttpClient`库,通过`HttpGet`对象来发送HTTP GET请求。同样,检查响应码为200后,从响应实体中获取输入流,再将其转换为Bitmap。虽然这种方法比`HttpURLConnection`更传统,但在某些情况下可能更适合。然而,由于`HttpClient`已被弃用,现在的新项目通常不推荐使用。 ```java public static Bitmap getImage1(String path){ HttpGet get = new HttpGet(path); HttpClient client = new DefaultHttpClient(); Bitmap pic = null; try { HttpResponse response = client.execute(get); HttpEntity entity = response.getEntity(); InputStream is = entity.getContent(); pic = BitmapFactory.decodeStream(is); } catch (Exception e) { e.printStackTrace(); } return pic; } ``` 方法三:本地缓存与`FileOutputStream` 第三种方法结合了网络请求和本地缓存。首先检查本地是否存在对应图片的文件,如果存在则直接返回Uri;否则,使用`HttpURLConnection`获取服务器上的图片数据,写入本地文件,然后返回该文件的Uri。这种方法减少了不必要的网络请求,提高了用户体验,但需要处理文件的生命周期和更新问题。 ```java public static Uri getImage2(String path, File cacheDir){ File localFile = new File(cacheDir, MD5.getMD5(path) + path.substring(path.lastIndexOf("."))); if(localFile.exists()){ return Uri.fromFile(localFile); } else { HttpURLConnection conn; try { conn = (HttpURLConnection) new URL(path).openConnection(); conn.setConnectTimeout(5000); conn.setRequestMethod("GET"); if(conn.getResponseCode() == 200){ FileOutputStream outputStream = new FileOutputStream(localFile); InputStream inputStream = conn.getInputStream(); byte[] buffer = new byte[1024]; int length; while((length=inputStream.read(buffer))!=-1){ outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); return Uri.fromFile(localFile); } } catch (Exception e) { e.printStackTrace(); } } return null; } ``` 在实际应用中,考虑到性能和用户体验,通常会选择第三种方法,即先尝试从本地缓存读取图片,如果没有或需要更新,则从服务器下载。同时,为了管理缓存,可以使用如LruCache、DiskLruCache等缓存策略,确保存储空间的有效利用,并处理文件的清理和更新。
- 粉丝: 5
- 资源: 924
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 【岗位说明】销售主管岗位职责及任职资格.docx
- 【岗位说明】销售助理职能说明书.doc
- 【岗位说明】销售助理岗位职责.doc
- 【岗位说明】销售专员岗位说明书.docx
- 【岗位说明】销售总监岗位职责.doc
- 【岗位说明】销售总监职能说明书.doc
- 【岗位说明】业务管理部经理职位说明书.doc
- 【岗位说明】业务部门职能说明书.doc
- 【岗位说明】业务管理员职能说明书.xls
- 【岗位说明】业务管理员岗位职责.xls
- 【岗位说明】医疗器械销售员的岗位职责.docx
- 【岗位说明】营销部经理岗位说明书.doc
- 【岗位说明】营销部门职位描述.doc
- 【岗位说明】营销策划部门职能说明书.doc
- 【岗位说明】营销策划职能说明书.xls
- 【岗位说明】营销策划岗位职责.xls