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() ...
随机推荐
- Flume FileChannel优化(扩展)实践指南
本文系微博运维数据平台(DIP)在Flume方面的优化扩展经验总结,在使用Flume FileChannel的场景下将吞吐率由10M/s~20M/s提升至80M/s~90M/s,分为四个部分进行介绍: ...
- Away3d 基础 1 ---对一个简单类的解释
转自:http://www.cnblogs.com/nooon/archive/2009/05/16/1458334.html 原英文地址: http://www.flashmagazine.com/ ...
- 杨佩昌:中国官员去德国考察看什么两眼发光 z
令中国人诧异的德国物价 只要是花费大量人工的行业,就很贵 □杨佩昌 德国是欧洲商品价格的洼地,连精明的瑞士人也开车到德国加油购物 一 2012年凤凰网组织十大著名博主前往澳洲考察并与前总理陆克文对话, ...
- java List遍历的方法
List可以用序号来遍历,但通常推荐使用iterator来遍历Iterator itr = list.iterator();while (itr.hasNext()) { Object nextObj ...
- HDJ -- 1022
#include<iostream> #include<cstdio> #include<string> #define MAXN 10 using namespa ...
- python 正则表达式 贪婪模式的简介和匹配时的几种模式
看到一篇文章,关于python正则的,http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 贪婪模式与非贪婪模式: 正则表达式通常用于 ...
- ARM学习笔记1——Arm寄存器与模式的关系
ARM微处理器上有37个32位的寄存器,其中有6个状态寄存器(一个CPSR,5个SPSR),其它31个为通用寄存器.在ARM的不同模式下,可以访问的物理寄存器是不同,如下图所示: 从图中可知,用户模式 ...
- Good Numbers
Problem Description If we sum up every digit of a number and the result can be exactly divided by 10 ...
- Web---JS-返回上一页并刷新代码整理
返回上一页并刷新在此功能有利于用户的体验,是每一个web开发人员所必备的一项,长话短说,今天介绍实现此功能的一个方法,需要了解的朋友可以参考下: 一:JS 重载页面,本地刷新,返回上一页 代码如下: ...
- javaweb要点复习 jsp和servlet
jsp:就是java server page , html嵌入java ,所以更方面显示(V) serlet,就是服务器端小程序 java中嵌入html,更方面业务处理. jsp执行过程 1)客户 ...