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() ...
随机推荐
- 机器更换登录密码重启,然后SQL Server登录不了
解决方法:
- HDU-1390 Binary Numbers
http://acm.hdu.edu.cn/showproblem.php?pid=1390 Binary Numbers Time Limit: 2000/1000 MS (Java/Others) ...
- selenium webdriver(1)---浏览器操作
启动浏览器 如何启动浏览器已在上篇文章中说明,这里还是以chrome为例,firefox.IE启动方式相同. //启动浏览器 import org.openqa.selenium.WebDriver; ...
- PCB覆铜时的安全距离
覆铜的安全间距(clearance)一般是布线的安全间距的二倍.但是在没有覆铜之前,为布线而设置好了布线的安全间距,那么在随后的覆铜过程中,覆铜的安全间距也会默认是布线的安全距离.这样与预期的结果不一 ...
- DAL与数据库类型的对应关系
MSSQL Server类型 DbType类型 C#类型 MySql类型 DbType类型 C#类型 bit Boolean bool bit(1) Boolean bool tinyint ...
- linux学习笔记---未完待续,缓慢更新
做为linux菜鸟,由于work的需要,慢慢的开始接触学习linux. <鸟哥的linux私房菜>学习笔记. 一.基础命令操作 1.显示日期的命令 date 执行date命令后,显示结果为 ...
- jquery获取节点的时候获取包含自己在内的HTML标签
jquery获取某个标签的html()方法的时候总是只能获取内部的 如果获取包含自身的HTML代码呢? 用.prop("outerHTML")方法获取 <div id=&qu ...
- DevExpress 用户控件 分页(上)
说明:使用用户控件分页,完成后,使用时非常简单,数据绑定,调用自己写的一个事件就OK了 前期准备工作: (1)添加一个用户控件 命名PageCtrl (2)打开代码: [csharp] view ...
- mysql添加用户权限
MySQL性能调优my.cnf详解 //登录MYSQLmysql -u root -p//创建用户insert into mysql.user(Host,User,Password) values(‘ ...
- linux杂谈(十九):DNSserver的配置(二)
1.本机和外网的解析 之前讨论了DNS的正向解析和反向解析,但有的时候我们想让DNSserver对于server本机的解析和对于外网的解析是不同的.那就须要在主配置文件里对本机和外网进行不同的配 ...