Android基础_web通信
一.发展史
1G 模拟制式手机,只能进行语音通话
2G 数字制式手机,增加接收数据等功能
3G 智能手机,它已经成了集语音通信和多媒体通信相结合,并且包括图像、音乐、网页浏览、电话会议以及其它一些信息服务等增值服务的新一代移动通信系统
4G 第四代移动通信技术, 4G是集3G与WLAN于一体,并能够快速传输数据、高质量、音频、视频和图像等。4G能够以100Mbps以上的速度下载
二.网络基础
Android平台有三种网络接口可以使用
标准Java接口 java.net.*(下面例子使用)
Apache接口 org.apache.*(开源项目HttpClient)
Android网络接口 android.net.*
HTTP通信
HTTP 超文本传输协议 Hyper Text Transfer Protocol
采用请求/响应模式
Android提供了HttpURLConnection 和HttpClient接口
三.activity代码
3.1下载网络图像并保存到SD卡
public void downLoadImage2(View view){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL("http://pic23.nipic.com/20120918/10910345_133800468000_2.jpg"); //构建一个URL(java.net)
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(*);//设置连接超时时间
conn.setDoInput(true);//默认true,服务器响应到客户端的都是数据流
conn.connect();
//获取服务器响应的数据流
InputStream input=conn.getInputStream();
//构建一个输出流,将下载的文件保存到SD卡指定位置
//构建要保存文件的位置
String path= Environment.getExternalStorageDirectory().getAbsolutePath()+"/gdnf_image/image_1.jpg";
File file=new File(path);
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
OutputStream out=new FileOutputStream(file);
byte[] bytes=new byte[];
for(int len=;(len= input.read(bytes))!=-;){
out.write(bytes,,len);
}
out.flush();
out.close();
input.close();
//将下载到的图像显示出来
final Bitmap bitmap= BitmapFactory.decodeFile(path);
//将图像设置到ImageView中
runOnUiThread(new Runnable() {
@Override
public void run() {
imageView.setImageBitmap(bitmap);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
3.2下载图像并保存到安装目录下
//下载图像并保存到安装目录下
Bitmap bitmap=null;
public void downLoadImage3(View view){
//构建文件的位置
final String path= getApplicationContext().getFilesDir().getAbsolutePath()+"/user_images/user_2.jpg";
final File file=new File(path);
if(file.exists()){
//调用工具类,读取一张小图
bitmap= BitMapUtils.getSmallBitmap(path);
//bitmap=BitMapUtils.rotateBitmap(bitmap,180);
imageView.setImageBitmap(bitmap);
}else{
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
//开启线程执行文件下载
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL("http://pic66.nipic.com/file/20150513/20186525_100135381000_2.jpg"); //构建一个URL(java.net)
HttpURLConnection conn= (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(*);//设置连接超时时间
conn.setDoInput(true);//默认true,服务器响应到客户端的都是数据流
conn.connect();
//获取服务器响应的数据流
InputStream input=conn.getInputStream();
OutputStream out=new FileOutputStream(file);
byte[] bytes=new byte[];
for(int len=;(len= input.read(bytes))!=-;){
out.write(bytes,,len);
}
out.flush();
out.close();
input.close();
bitmap= BitmapFactory.decodeFile(path);
//将图像设置到ImageView中
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(MainActivity.this, "下载图像完成", Toast.LENGTH_SHORT).show();
imageView.setImageBitmap(bitmap);
}
});
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
涉及到到的工具类 BitMapUtils 代码如下:
// 根据路径获得图片并压缩,返回bitmap用于显示
public static Bitmap getSmallBitmap(String filePath) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;//只加载图像框架
BitmapFactory.decodeFile(filePath, options); // 计算该图像压缩比例
options.inSampleSize = calculateInSampleSize(options, , ); //设置加载全部图像内容
options.inJustDecodeBounds = false;
return BitmapFactory.decodeFile(filePath, options);
}
3.3下载图像并保存到安装目录下(判断图片是否存在)
public void downLoadImage4(View view){
String from="http://pic24.photophoto.cn/20120919/0036036482476741_b.jpg";
final String save=Environment.getExternalStorageDirectory().getAbsolutePath()+"/gdnf_image/body3.jpg";
if(!FileUtils.existsFile(save)) {//文件如果不存在,就下载
FileUtils.downLoadFile(from, save, new CallBack() {
@Override
public void success() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),"文件下载完毕",Toast.LENGTH_SHORT).show();
Bitmap bm=BitMapUtils.getSmallBitmap(save);
imageView.setImageBitmap(bm);
}
});
}
@Override
public void failed() {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), "文件下载失败", Toast.LENGTH_SHORT).show();
}
});
}
});
}else{
Bitmap bm=BitMapUtils.getSmallBitmap(save);
imageView.setImageBitmap(bm);
}
}
涉及到的工具类 existsFile() downLoadFile() getSmallBitmap()
public static boolean existsFile(String path){
if(path!=null&&path.length()>) {
File file = new File(path);
if(file.exists())
return true;
}
return false;
}
//执行下载文件到指定位置
public static void downLoadFile(final String fromPath, final String savePath, final CallBack callBack){
if(fromPath!=null&&savePath!=null){
new Thread(new Runnable() {
@Override
public void run() {
try {
URL url=new URL(fromPath);
HttpURLConnection conn=(HttpURLConnection) url.openConnection();
conn.setConnectTimeout(*);
conn.connect();
InputStream input=conn.getInputStream();
File file=new File(savePath);
if(!file.getParentFile().exists())
file.getParentFile().mkdirs();
OutputStream out=new FileOutputStream(file);
byte[] bytes=new byte[];
for(int len=;(len=input.read(bytes))!=-;){
out.write(bytes,,len);
}
out.flush();
out.close();
input.close();
callBack.success();//下载成功
} catch (Exception e) {
e.printStackTrace();
callBack.failed();//下载失败
}
}
}).start();
}
}
final CallBack callBack自定义一个回调函数
public interface CallBack {
public void success();
public void failed();
}
Android基础_web通信的更多相关文章
- Android基础_web通信3
在Android基础_web通信2中,我运用的JSONObject是Android原生的json类,通过import org.json.JSONObject来导入. 还有另外一种更简单的方法,就是用G ...
- Android基础_web通信2
一.移动客服端实现对PC端数据的操作 在PC端模拟一个数据库,实现用户的增删改查,然后在移动客服端实现对PC端数据库的操作 在PC端建立三个表 用户表(Users),员工表(Emp), 部门表(Dep ...
- Andorid基础_web通信_webView案例
一.创建Activity,layout文件 activity_web_view.xml代码: <?xml version="1.0" encoding="utf-8 ...
- Android基础总结(8)——服务
服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务.服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇
前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...
- android基础---->service的生命周期
服务是一个应用程序组件代表应用程序执行一个长时间操作的行为,虽然不与用户交互或供应功能供其它应用程序使用.它和其他的应用对象一样,在他的宿主进程的主线程中运行.今天我们开始android中普通serv ...
- Android基础——Fragment控制切换多个页面
今天接着上一篇文章,讲解一下Fragment的控制,主要是切换View和页面替换等操作.还有就是如何获取Fragment的管理对象,以及与Activity的通信方式. (PS:新建的QQ群,有兴趣可以 ...
- Android基础新手教程——4.1.3 Activity登堂入室
Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...
随机推荐
- mybatis 之 占位符#{} 和 ${}
#{}占位符用来设置参数,参数的类型可以有3种,基本类型,自定义类型,map基本类型作为参数,参数与占位符中的名称无关. <select id="findById" para ...
- Unable to resolve persistence unit root URL
异常信息 时间:2017-03-07 11:46:05,516 - 级别:[ WARN] - 消息: [other] The web application [ROOT] appears to hav ...
- docker入门【1】
1.拉取镜像 docker pull 镜像名:版本号 例如:docker pull tomcat:7.0 默认会从docker官方镜像库拉取,不指定版本的话版本为latest 拉取后docker im ...
- 给虚拟机添加新硬盘并分区,fdisk查看分区,分区,重新读取分区表信息partprobe,格式化,挂载,查看分区挂载信息,自动挂载文件/etc/fstab,/etc/fstab文件错误导致重启崩溃后的修复
1.虚拟机关机断电 2.添加硬盘 2.开机 3.fdisk -l查看刚才新添加的硬盘 [root@localhost ~]# fdisk -l 磁盘 /dev/sda:21.5 GB, 2147483 ...
- mongodb 复制集
mongodb 复制集 复制集简介 Mongodb复制集由一组Mongod实例(进程)组成,包含一个Primary节点和多个Secondary节点,Mongodb Driver(客户端)的所有数据都写 ...
- 前端模块化:RequireJS(转)
前言 前端模块化能解决什么问题? 模块的版本管理 提高可维护性 -- 通过模块化,可以让每个文件职责单一,非常有利于代码的维护 按需加载 -- 提高显示效率 更好的依赖处理 -- 传统的开发模式,如果 ...
- IOS学习1——IOS应用程序的生命周期及基本架构
一.应用程序的状态和多任务 有时系统会从app一种状态切换另一种状态来响应系统发生的事件.例如,当用户按下home键.电话打入.或其他中断发生时,当前运行的应用程序会切换状态来响应.应用程序的状态有以 ...
- Java 集成 速卖通开发.
一.申请成为开发者 申请入口:http://isvhz.aliexpress.com/isv/index.htm 说明文档:http://activities.aliexpress.com/open/ ...
- Django2中文文档--目录及介绍部分
Django2文档-文档结构 我是按照官方文档的格式进行翻译,所以格式根官方格式一致 如果大家发现哪些地方有问题可以联系我 2426525089@qq.com 或者加入QQ群跟我一起翻译,群号码: 2 ...
- Oracle学习笔记_10_判断是否为日期类型
FUNCTION isdate (datestr VARCHAR2, format VARCHAR2) RETURN number IS p_date DATE; BEGIN SELECT TO_DA ...