android网络图片查看器
package com.itheima.netimageviewer; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.res.Resources.Theme; import android.graphics.Bitmap; import android.graphics.Bitmap.CompressFormat; import android.graphics.BitmapFactory; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.widget.ImageView; import android.widget.Toast; public class MainActivity extends Activity { protected static final int LOAD_IMAGE = 1; protected static final int LOAD_ERROR = 2; // 服务器所有图片的路径 private List<String> paths; private ImageView iv; /** * 当前的位置 */ private int currentPosition = 0; //1.创建一个消息处理器 private Handler handler = new Handler(){ //3.处理消息 public void handleMessage(Message msg) { switch (msg.what) { case LOAD_IMAGE: Bitmap bitmap = (Bitmap) msg.obj; iv.setImageBitmap(bitmap); break; case LOAD_ERROR: Toast.makeText(getApplicationContext(), (String)msg.obj, 0).show(); break; } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); iv = (ImageView) findViewById(R.id.iv); // 1.连接服务器 获取所有的图片的目录信息 loadAllImagePath(); } /** * 开始加载图标,在从服务器获取完毕资源路径之后执行 */ private void beginLoadImage() { // TODO:把每个图片的路径获取出来, 通过路径加载图片. try { paths = new ArrayList<String>(); File file = new File(getCacheDir(), "info.txt"); FileInputStream fis = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(fis)); String line; while ((line = br.readLine()) != null) { paths.add(line); } fis.close(); // 2.加载图片资源 loadImageByPath(paths.get(currentPosition)); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } /** * 通过路径获取图片资源 * * @param path * 图片的路径 * @return */ private void loadImageByPath(final String path) { new Thread() { public void run() { try { Thread.sleep(2000); // 判断缓存是否存在,如果存在就那缓存图片,如果不存在才去获取服务器的资源 File file = new File(getCacheDir(), path.replace("/", "") + ".jpg"); if (file.exists() && file.length() > 0) { System.out.println("通过缓存把图片资源获取出来...."); // 缓存存在 //iv.setImageBitmap( BitmapFactory.decodeFile(file.getAbsolutePath())); //2.子线程想去更新ui,发送消息 Message msg = Message.obtain(); msg.what = LOAD_IMAGE; msg.obj = BitmapFactory.decodeFile(file.getAbsolutePath()); handler.sendMessage(msg); } else { System.out.println("通过访问网络把图片资源获取出来...."); URL url = new URL(path); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.setRequestMethod("GET"); int code = conn.getResponseCode(); if (code == 200) { InputStream is = conn.getInputStream(); // 内存中的图片 Bitmap bitmap = BitmapFactory.decodeStream(is); // 如果图片被下载完毕了,应该把图片缓存起来. // CompressFormat.JPEG 压缩的方式 png jpg // 100 压缩比例 100 无损压缩 // stream 把图片写入到哪个缓存流里面 FileOutputStream stream = new FileOutputStream(file); bitmap.compress(CompressFormat.JPEG, 100, stream); stream.close(); is.close(); Message msg = Message.obtain(); msg.obj = bitmap; msg.what = LOAD_IMAGE; handler.sendMessage(msg); //iv.setImageBitmap(bitmap); } else { //Toast.makeText(MainActivity.this, "获取失败", 0).show(); Message msg = Message.obtain(); msg.what = LOAD_ERROR; msg.obj = "获取失败"; handler.sendMessage(msg); } } } catch (Exception e) { e.printStackTrace(); Toast.makeText(MainActivity.this, "获取失败", 0).show(); Message msg = Message.obtain(); msg.what = LOAD_ERROR; msg.obj = "获取失败"; handler.sendMessage(msg); } }; }.start(); } /** * 获取全部图片资源的路径 */ private void loadAllImagePath() { new Thread() { public void run() { // 浏览器发送一个get请求就可以把服务器的数据获取出来. // 用代码模拟一个http的get请求 try { // 1.得到服务器资源的路径 URL url = new URL("http://192.168.1.109:8080/img/gaga.html"); // 2.通过这个路径打开浏览器的连接. HttpURLConnection conn = (HttpURLConnection) url .openConnection();// ftp // http // https // rtsp // 3.设置请求方式为get请求 conn.setRequestMethod("GET");// 注意get只能用大写 不支持小写 // 为了有一个更好的用户ui提醒,获取服务器的返回状态码 int code = conn.getResponseCode();// 200 ok 404资源没有找到 503 // 服务器内部错误 if (code == 200) { // 4.获取服务器的返回的流 InputStream is = conn.getInputStream(); File file = new File(getCacheDir(), "info.txt"); FileOutputStream fos = new FileOutputStream(file); byte[] buffer = new byte[1024]; int len = 0; while ((len = is.read(buffer)) != -1) { fos.write(buffer, 0, len); } is.close(); fos.close(); beginLoadImage(); } else if (code == 404) { Message msg = Message.obtain(); msg.what = LOAD_ERROR; msg.obj = "获取失败,资源没有找到"; handler.sendMessage(msg); //Toast.makeText(MainActivity.this, "获取失败,资源没有找到", 0).show(); } else { //Toast.makeText(MainActivity.this, "服务器异常", 0).show(); Message msg = Message.obtain(); msg.what = LOAD_ERROR; msg.obj = "服务器异常"; handler.sendMessage(msg); } } catch (Exception e) { e.printStackTrace(); //Toast.makeText(MainActivity.this, "获取失败", 0).show(); Message msg = Message.obtain(); msg.what = LOAD_ERROR; msg.obj = "获取失败"; handler.sendMessage(msg); } }; }.start(); } /** * 上一张 * * @param view */ public void pre(View view) { currentPosition--; if (currentPosition < 0) { currentPosition = paths.size() - 1; } loadImageByPath(paths.get(currentPosition)); } /** * 下一张 * * @param view */ public void next(View view) { currentPosition++; if (currentPosition == paths.size()) { currentPosition = 0; } loadImageByPath(paths.get(currentPosition)); } }
添加权限
<uses-permission android:name="android.permission.INTERNET"/>
android网络图片查看器的更多相关文章
- Android 网络图片查看器
今天来实现一下android下的一款简单的网络图片查看器 界面如下: 代码如下: <LinearLayout xmlns:android="http://schemas.android ...
- Android -- 网络图片查看器,网络html查看器, 消息机制, 消息队列,线程间通讯
1. 原理图 2. 示例代码 (网络图片查看器) (1) HttpURLConnection (2) SmartImageView (开源框架:https://github.com/loopj/an ...
- Android 网络图片查看器与网页源码查看器
在AndroidManifest.xml里面先添加访问网络的权限: <uses-permission android:name="android.permission.INTERNET ...
- 无废话Android之内容观察者ContentObserver、获取和保存系统的联系人信息、网络图片查看器、网络html查看器、使用异步框架Android-Async-Http(4)
1.内容观察者ContentObserver 如果ContentProvider的访问者需要知道ContentProvider中的数据发生了变化,可以在ContentProvider 发生数据变化时调 ...
- android 网络_网络图片查看器
xml <?xml version="1.0"?> -<LinearLayout tools:context=".MainActivity" ...
- Android简易实战教程--第二十六话《网络图片查看器在本地缓存》
本篇接第二十五话 点击打开链接 http://blog.csdn.net/qq_32059827/article/details/52389856 上一篇已经把王略中的图片获取到了.生活中有这么 ...
- Android简易实战教程--第二十五话《网络图片查看器》
访问网络已经有了很成熟的框架.这一篇只是介绍一下HttpURLConnection的简单用法,以及里面的"注意点".这一篇可以复习或者学习HttpURLConnection.han ...
- Android项目——网络图片查看器
效果-=-------------->加入包 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/an ...
- Android smartimageview网络图片查看器
调用代码: SmartImageView siv = (SmartImageView) findViewById(R.id.siv);siv.setImageUrl(et_path.getText() ...
随机推荐
- dev中gridview控件 z
目录:一.客户端常用1.常用API2.聚焦行变更事件3.客户端选择多行4.客户端选择行5. 获取选择的行数目6.单击行时,选中行7.通过checkbox 选择行8.选择所有行9.启动编辑框,Conta ...
- Linux NTP校时
1.安装客户端(root权限运行) apt-get install ntpdate 2.修改配置文件:“/etc/default/ntpdate”, NTPSERVERS="ntp. ...
- Django中的ORM进阶操作
Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...
- UVA 10557 XYZZY
Problem D: XYZZY ADVENT: /ad�vent/, n. The prototypical computer adventure game, first designed by W ...
- HTML快速参考
HTML 模版 html> <head> <meta charset="utf-8"/> <title>html template< ...
- Android解析qq聊天记录表情
偶然在一个需求中需要解析qq聊天记录表情,表情的格式是以/开始,比如:你好啊?/微笑,在网上找了半天,也没能找到一个比较合适的,所以准备自己实现一下,首先要将表情图片和表情字符对上号,我想了几种解决方 ...
- 【转载】NativeSQL实例
转自:http://blog.sina.com.cn/s/blog_3f2c03e301017fqz.html ---------------------------------------- ...
- use SWF / Flash in cocos2d-x; cocos2d(cocos2d-x) 直接播放flash / SWF文件
前段时间移植一个页游到手游,原先页游的项目里面有1000+的Flash人物,宠物动画,特效. 这要是全部重新做一遍,还不累死人?所以就想干脆直接在Cocos2d(x)里面播放SWF文件.(包括场景,过 ...
- VS扩展CodeMaid代码整理插件
本文章转载:http://www.cnblogs.com/wintersun/p/3577039.html 官方地址:http://www.codemaid.net/ 开源VS扩展CodeMaid介绍 ...
- OpenStack_Swift源代码分析——创建Ring及加入�设备源代码算法具体分析
1 创建Ring 代码具体分析 在OpenStack_Swift--Ring组织架构中我们具体分析了Ring的具体工作过程,以下就Ring中添加�设备,删除设备,已经又一次平衡的实现过程作具体的介绍. ...