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() ...
随机推荐
- POJ -- 3140
#include<iostream> #include<cstdio> #include<cstring> #include<string> #defi ...
- C# Login方法
public static bool User_Login(string url, string uname, string password, out string[] userInfo) { st ...
- linux修改主机名
查看机器名:uname -a 修改机器名: redhat中修改主机名 第一步:#hostname oratest 第二步:修改/etc/sysconfig/network中的hostname 第三步: ...
- Raspberry Pi Kernel Compilation 内核编译官方文档
elinux.org/Raspberry_Pi_Kernel_Compilation#Use_the_provided_compiler Software & Distributions: S ...
- Linux内核是如何创建一个新进程的?
进程描述 进程描述符(task_struct) 用来描述进程的数据结构,可以理解为进程的属性.比如进程的状态.进程的标识(PID)等,都被封装在了进程描述符这个数据结构中,该数据结构被定义为task_ ...
- MySQL数据库建立外键失败的原因总结
在MySQL数据库创建外键时,经常会发生一些错误,这是一件很令人头疼的事.一个典型的错误就是:Can’t create table... 的错误.在很多实例中,这种错误的发生都是因为mysql一直以来 ...
- Java的MongoDB驱动及读写策略
网上看见一篇博文,详细讲了MongoDB读写策略,将来生产会遇到类似的问题,转来备查. 指定新mongo实例: Mongo m = new Mongo(); Mongo m = new Mongo( ...
- 329. Longest Increasing Path in a Matrix
最后更新 三刷? 找矩阵里的最长路径. 看起来是DFS,实际上也就是.但是如果从每个点都进行一次DFS然后保留最大的话,会超时. 这里需要结合DP,dp[i][j]表示以此点开始的最长路径,这样每次碰 ...
- 【OpenCV】基于kmeans的细胞检测方法
问题是这样的,有一幅经过二值化处理之后的图像,我们希望统计其中细胞的个数,和不同粘连情况的细胞个数,比如,下图中有1个细胞组成连通区域的,也有2个细胞组成连通区域的,也有更多个细胞组成连通区域的,我们 ...
- 利用UI_APPEARANCE统一设置UITabBarItem样式
-(void)setupTabBarItemAttributes{ //attributes NSMutableDictionary *selectedAttrs= [NSMutableDiction ...