一.发展史

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通信的更多相关文章

  1. Android基础_web通信3

    在Android基础_web通信2中,我运用的JSONObject是Android原生的json类,通过import org.json.JSONObject来导入. 还有另外一种更简单的方法,就是用G ...

  2. Android基础_web通信2

    一.移动客服端实现对PC端数据的操作 在PC端模拟一个数据库,实现用户的增删改查,然后在移动客服端实现对PC端数据库的操作 在PC端建立三个表 用户表(Users),员工表(Emp), 部门表(Dep ...

  3. Andorid基础_web通信_webView案例

    一.创建Activity,layout文件 activity_web_view.xml代码: <?xml version="1.0" encoding="utf-8 ...

  4. Android基础总结(8)——服务

    服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务.服务的运行不依赖任何用户界面,即使当程序被切换到后台,或者用户打开了 ...

  5. 【Xamarin开发 Android 系列 4】 Android 基础知识

    原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...

  6. 【朝花夕拾】Android性能篇之(七)Android跨进程通信篇

    前言 只要是面试高级工程师岗位,Android跨进程通信就是最受面试官青睐的知识点之一.Android系统的运行由大量相互独立的进程相互协助来完成的,所以Android进程间通信问题,是做好Andro ...

  7. android基础---->service的生命周期

    服务是一个应用程序组件代表应用程序执行一个长时间操作的行为,虽然不与用户交互或供应功能供其它应用程序使用.它和其他的应用对象一样,在他的宿主进程的主线程中运行.今天我们开始android中普通serv ...

  8. Android基础——Fragment控制切换多个页面

    今天接着上一篇文章,讲解一下Fragment的控制,主要是切换View和页面替换等操作.还有就是如何获取Fragment的管理对象,以及与Activity的通信方式. (PS:新建的QQ群,有兴趣可以 ...

  9. Android基础新手教程——4.1.3 Activity登堂入室

    Android基础新手教程--4.1.3 Activity登堂入室 标签(空格分隔): Android基础新手教程 本节引言: 好的,在学习了两节的Activity后相信大家已经知道怎样去使用Acti ...

随机推荐

  1. Redis 订阅发布 - Jedis实现

    Redis 订阅发布 - Jedis实现 我想到使用Redis的订阅发布模式是用来解决推送问题的-. 对于概念性的叙述,多多少少还是要提一下的: ​ 什么是Redis发布订阅?Redis发布订阅是一种 ...

  2. 关于IntelliJ IDEA有时候快捷键无效的说明

    1.这个原因最大的因素可能就是 搜狗输入法了, 关闭搜狗输入法,ok, 2.也可能是qq快捷键冲突,关闭它. 3.也可能是搜狗输入法快捷键冲突,关闭它.

  3. python爬虫小结1

    先看正则化,正则化就是描述命令和字符切分.查找.筛选等功能的方便方式. http://www.cnblogs.com/fnng/archive/2013/05/20/3089816.html 一个游戏 ...

  4. API接口开发简述

    作为最流行的服务端语言PHP(PHP: Hypertext Preprocessor),在开发API方面,是很简单且极具优势的.API(Application Programming Interfac ...

  5. Python学习日记:day5-------dict字典

    #字典dict------->唯一的映射类型 1.数据类型的划分 数据类型划分为可变数据类型和不可变数据类型. 不可变数据类型:tupe(元组).bool.int.str           可 ...

  6. C语言中一些不被熟知的特性

    designated initializers(c99) C99允许你对结构体中指定的变量初始化,如 struct Foo { int x; int y; int z; }; }; 指定初始化也可适用 ...

  7. Java ArrayIndexOutOfBoundsException: Exception Hierarchy

  8. [编织消息框架][netty源码分析]1分析切入点

    在分析源码之前有几个疑问 1.BOSS线程如何转交给handle(业务)线程2.职业链在那个阶段执行3.socket accept 后转给上层对象是谁4.netty控流算法 另外要了解netty的对象 ...

  9. 微信小程序生成带参数的二维码 小程序二维码

    我是用php写的 先按照要求生成accesstoken $tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=clien ...

  10. Xamarin.Android中实现延迟跳转

    http://blog.csdn.net/candlewu/article/details/52953228 方法一: 使用Handler().PostDelayed 延迟启动 new Handler ...