Android网络

Http:

1从网络获取数据

a从网络获取图片,以byte[]字节数组保存,并构建一个Bitmap

b.从网络获取为xml/Json,要解析,并封装成对象。

public byte[] getNetImage(String path) throws IOException{
  URL url = new URL(path);
  HttpURLConnection connection =(HttpURLConnection) url.openConnection();//基于HTTP协议连接对象
  connection.setConnectTimeout(5000);
  connection.setRequestMethod("GET");
  if(connection.getResponseCode() == HttpURLConnection.HTTP_OK){
      InputStream in =connection.getInputStream();
      return Utils.readStream(in);
  }
  return null;
}

//将流读取到字节数组
public static byte[] readStream(InputStream in) throws IOException {
  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  byte[] buffer = new byte[1024];
  int len = 0;
  while ((len = in.read(buffer)) != -1) {
      baos.write(buffer, 0, len);
  }
  return baos.toByteArray();
}

2 以GET/POST方式上传到服务器

a.通过HTTP发送参数到服务器

GET不适合传输大数据

  组拼url路径后的参数

POST:Content-Type Content-Length

  组拼将要发送的实体数据

HttpClient开源项目

  使用UrlEncodedFormEntity类构造实体数据

  内部做了很多封装,性能不如手写的GET/POST

  操作HTTPS,Cookie编码简单些

// 发送POST请求
public static boolean sendPostRequest(String path, Map<String, String> params, String encoding)throws IOException {
  StringBuilder builder = new StringBuilder();
  for (Map.Entry<String, String> entry : params.entrySet()) {
    builder.append("?").append(entry.getKey()).append("=").append(entry.getValue()).append("&");
  }
  builder.deleteCharAt(builder.length() - 1);
  URL url = new URL(path);
  HttpURLConnection connection = (HttpURLConnection) url.openConnection();
  connection.setConnectTimeout(5000);
  connection.setRequestMethod("POST");
  connection.addRequestProperty("Content-Type", "");
  connection.addRequestProperty("Content-Length", String.valueOf(builder.length()));
  connection.setDoOutput(true);
  OutputStream os = connection.getOutputStream();
  os.write(builder.toString().getBytes());// 只有取得服务器响应消息,才真正发送除数据,现在仅放到内存
  if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
      return true;
  }
  return false;
}

// HttpClient
public static boolean sendHttpClientRequest(String path, Map<String, String> params,String encoding) throws IOException {
  List<NameValuePair> valuePairs = new ArrayList<NameValuePair>();
  for (Map.Entry<String, String> entry : params.entrySet()) {
      valuePairs.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
  }
  UrlEncodedFormEntity entity = new UrlEncodedFormEntity(valuePairs, encoding);// 构造实体数据
  HttpPost post = new HttpPost(path);// 构造POST请求
  post.setEntity(entity);
  DefaultHttpClient client = new DefaultHttpClient();// 构造一个浏览器
  HttpResponse response = client.execute(post);
  if (response.getStatusLine().getStatusCode() == 200) {
      return true;
  }
  return false;
}

b.通过Socket上传文件到服务器

先判断文件是否存在

HttpClient内部使用缓存,当上传文件超过1M,产生内存溢出Socket

实体数据长度= 文本类型长度+文件类型长度

时间: 2024-10-10 09:46:42

Android网络的相关文章

Android网络通讯简介

网络通信应该包含三部分的内容:发送方.接收方.协议栈.发送方和接收方是参与通信的主体,协议栈是发送方和接收方进行通信的契约.按照服务类型,网络通信可分为面向连接和无连接的方式.面向连接是在通信前建立通信链路,而通信结束后释放该链路.无连接的方式则不需要在通信前建立通信连接,这种方式不保证传输的质量. Android提供了多种网络通信的方式,如Java中提供的网络编程,在Android中都提供了支持.Android中常用的网络编程方式如下: 针对TCP/IP协议的Socket和ServerSock

Android网络请求框架AsyncHttpClient实例详解(配合JSON解析调用接口)

最近做项目要求使用到网络,想来想去选择了AsyncHttpClient框架开进行APP开发.在这里把我工作期间遇到的问题以及对AsyncHttpClient的使用经验做出相应总结,希望能对您的学习有所帮助. 首先按照惯例先来简单了解一些AsyncHttpClient网络框架的一些知识. 1.简介 Android中网络请求一般使用Apache HTTP Client或者采用HttpURLConnect,但是直接使用这两个类库需要写大量的代码才能完成网络post和get请求,而使用android-a

Android网络编程网上文章总结

关于网络编程,网上也有许多好的文章,这里我就选了几篇觉得不错的归纳到了一起,仅供参考 Android网络编程概述 首先,应该了解的几个问题: 1)Android平台网络相关API接口 a) java.net.*(标准Java接口) java.net.*提供与联网有关的类,包括流.数据包套接字(socket).Internet协议.常见Http处理等.比如:创建URL,以及URLConnection/HttpURLConnection对象.设置链接参数.链接到服务器.向服务器写数据.从服务器读取数

Android网络编程系列 一 TCP/IP协议族

在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必要进一步的了解,这就要我们了解网络通信层了,提到网络通信层不得不说起ISO-OSI的七层协议经典架构,如图所示: 上图的左边部分就是osi架构模型了, ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标

Android网络编程之http发送/请求服务

最近在学习Android网络编程的知识,以下是今晚学习的一些心得.与大家共同分享. 在实际的应用开发中很多时候需要app向服务器请求数据,那么app如何发送请求呢?下面的代码就是其中的一种情况,使用HttpURLConnection向服务器发送请求的数据,然后处理服务器返回的数据. 下面的代码只是客户端的一个简答测试代码.还需要在pc上安装一个 tomcat服务器 ,然后将demo中的jsp文件部署到tomcat上,具体的方法百度一下便知. package com.lee.nethttp; im

漫谈Android网络编程

Android从业者,十之八九都是在做网络应用,不是互联网也是局域网.如今在4G和Wifi的天下下,流量什么的都已是浮云,单机应用的市场已然悄悄的一去不复返了.所以呢,不了解网络请求的同学要小心了,当心被时代的大浪一个浪头排在沙滩上. Android实现网络编程有HTTP.也有Socket.HTTP协议是应用层协议,主要解决如何包装数据,网络应用都会用到的协议:Socket是TCP/IP协议的封装,主要解决数据如何在网络中传输,常用于与服务器保持长连接,一般用于广告推送.实时聊天.在线游戏等.

Android网络编程(一)---Socket基础

Socket通常称为""套接字.Socket字面上的中文意思为"插座".一台服务器可能会提供很多服务,每种服务对应一个Socket,而客户的"插头"也是一个Socket.Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口.Socket把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议.Socket用于描述IP地址和端口,是一个通信链的句柄.应

Android网络传输中必用的两个加密算法:MD5 和 RSA (附java完成测试代码)

MD5和RSA是网络传输中最常用的两个算法,了解这两个算法原理后就能大致知道加密是怎么一回事了.但这两种算法使用环境有差异,刚好互补. 一.MD5算法 首先MD5是不可逆的,只能加密而不能解密.比如明文是yanzi1225627,得到MD5加密后的字符串是:14F2AE15259E2C276A095E7394DA0CA9  但不能由后面一大串倒推出yanzi1225627.因此可以用来存储用户输入的密码在服务器上.现在下载文件校验文件是否中途被篡改也是用的它,原理参见:http://blog.c

Android网络(3):HttpClient作客户端,Tomcat Servlet作服务器的交互示例

前面相继介绍了Android网络编程里的Socket传输图片.HttpURLConnection,今天看HttpClient. 第一部分:JavaEE版的Eclipse配置Tomcat [备注:开发后台服务器用Eclipse的JavaEE版最好的,但单就Tomcat来说(不写jsp之类的),本文下面的服务器方面操作在普通版的Eclipse也是可以的.我这里为了和ADT-bundle分开,特意重新安个JavaEE版的Eclipse.] 1.下载Eclipse的Tomcat插件:http://www

Android网络编程之使用HttpClient批量上传文件

请尊重他人的劳动成果,转载请注明出处:Android网络编程之使用HttpClient批量上传文件 我曾在<Android网络编程之使用HTTP访问网络资源>一文中介绍过HttpCient的使用,这里就不在累述了,感兴趣的朋友可以去看一下.在这里主要介绍如何通过HttpClient实现文件上传. 1.预备知识: 在HttpCient4.3之前上传文件主要使用MultipartEntity这个类,但现在这个类已经不在推荐使用了.随之替代它的类是MultipartEntityBuilder. 下面