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 ...
随机推荐
- MQTT 简介
MQTT 全称是 Message Queue Telemetry Transport,是一个轻量级的“发布/订阅”消息传输协议. 官网 http://mqtt.org/ 发布/订阅 MQTT 的基本概 ...
- android studio 使用adb命令传递文件到android设备
一:文件传输 在android开发中,有时候需要将文件从pc端传递至android,或者将软件运行的日志,从android设备传递到pc进行分析,我们可以使用windows的cmd窗口,或者andro ...
- 代码生成利器:IDEA 强大的 Live Templates(转)
代码生成利器:IDEA 强大的 Live Templates - 文章 - 伯乐在线http://blog.jobbole.com/110607/ 前言 Java 开发过程经常需要编写有固定格式的代码 ...
- ios单独的页面支持横竖屏的状态调整,HTML5加载下(更新2)
单独的页面支持横竖屏的状态调整,HTML5加载下 工程中设置只支持竖屏状态,在加载HTML5的界面可以是横竖屏的,在不对工程其他界面/设置做调整的同时,可以这样去 #import "View ...
- IT服务(运维)管理实施的几个要点--第一章 IT服务质量的标准
子曰"干的最好就是个60分,稍有纰漏就是不及格" 谈一个事情,最先要谈的就是统一标准,又或者这个标准已经约定俗成,广泛认可,所以就可以略过.对于IT服务质量来说,确实有一个统一的标 ...
- 【Tomcat】重新打war包
Extract war in tomcat/webapps #!/bin/bash #----------------------------------------------- # FileNam ...
- 转 - .net/c# 使用RabbitMQ
背景 最近需要用C#写一个Adapter来做数据传输,合作方使用的是RabbitMQ,所以我这边也要跟着写写... 在网上搜索了一些,发现园子里的这篇写的还是非常好的.虽然有点老了,我自己用的是最新的 ...
- Python的range函数详细用法
1. >>> range(1,5) #代表从1到5(不包含5) [1, 2, 3, 4]>>> 2. >>> range(1,5,2) #代表从 ...
- Android 7.1 ActivityManagerService 屏幕旋转流程分析 (四)
四.Activity的更新(旋转) sendNewConfiguration()会调用到ActivityManagerService的updateConfiguration()来update Conf ...
- thinkphp 官方文件执行引入流程
官方手册上的执行流程图: 系统流程 用户URL请求 调用应用入口文件(通常是网站的index.php) 载入框架入口文件(ThinkPHP.php) 记录初始运行时间和内存开销 系统常量判断及定义 载 ...