一.发展史

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. 深入理解计算机系统_3e 第六章家庭作业 CS:APP3e chapter 6 homework

    6.22 假设磁道沿半径均匀分布,即总磁道数和(1-x)r成正比,设磁道数为(1-x)rk: 由题单个磁道的位数和周长成正比,即和半径xr成正比,设单个磁道的位数为xrz: 其中r.k.z均为常数. ...

  2. MySQL必知必会笔记

    数据库和表的增删改 创建数据库 CREATE DATABASE 数据库名; # mysql中还可使用如下语句 CREATE SCHEMA 数据库名; 数据库选择 USE 数据库名; 创建表 creat ...

  3. JavaScript数字例子,二分法,冒泡排序

    先看一下两个例子: 十个成绩,求总分,最高分,最低分 //输入10个成绩,求总分,最高,最低 var arr=new Array(67,45,56,12,90,98,23,43,56,99,97); ...

  4. Mac中Eclipse安装和使用svn

    Eclipse版本为Neon Release (4.6.0) 安装svn 安装HomeBrew 在终端中输入 ruby -e "$(curl -fsSL https://raw.github ...

  5. JAVA中的集合与排序

    一:常见的集合类 Collection接口  和   Map接口 Collection ①:collection是最常见的集合的上级接口. ②:继承自collection的常用接口有List,Set, ...

  6. Core Erlang:Erlang的Core中间表示

    随着erlang的不断发展,它的语法越来越复杂,不便于诸如分析器,调试器此类程序在源码层次直接进行解析,而CORE Erlang旨在为Erlang提供一个人类可读可改的中间表示(Intermediat ...

  7. Python 项目实践三(Web应用程序)第一篇

    一 Djangao入门 当今的网站实际上都是富应用程序(rich application),就像成熟的桌面应用程序一样.Python提供了一组开发Web应用程序的卓越工具.在本章中,你将学习如何使用D ...

  8. /sbin/nologin 和 /bin/false 的区别

    /bin/false是最严格的禁止login选项,一切服务都不能用,而/sbin/nologin只是不允许系统login,可以使用其他ftp等服务 如果想要用false在禁止login的同时允许ftp ...

  9. java数组去重

    java数组去重 1.创建新数组,用于保存比较结果 2.设定随机数组最大最小值 3.开始去重 4.计算去重所需时间 package org.zheng.collection; import java. ...

  10. PHP与REDIS

    安装 1.一定要搞懂自己php的版本,和环境,今天试一上午,就是因为X86,而我的php环境是X64. 2. 将下载的php_redis.dll和php_igbinary.dll放在php扩展目录中( ...