`
百合不是茶
  • 浏览: 354659 次
社区版块
存档分类
最新评论

android 网络

阅读更多

android的网络编程和java的一样没什么好分析的都是一些死的照着写就可以了,所以记录下来  方便查找   ,  服务器使用的是TomCat

 

服务器代码;  servlet的使用需要在xml中注册

package servlet;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import pojo.Music;

/**
 * Servlet implementation class MusicServlet
 */
public class MusicServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {

		request.setCharacterEncoding("UTF-8");
		
		// 获得客户端提交的参数,获取客户端的参数
		String flag = request.getParameter("flag");
		//将字符串的字符集由Iso8859-1 转为 UTF-8
		//flag = new String(flag.getBytes("ISO8859-1"),"UTF-8");
		System.out.println("请求的:"+flag);

		// 链接数据库,查询数据
		ArrayList<Music> list = new ArrayList<Music>();
		for (int i = 0; i < 10; i++) {
			Music m = new Music();
			m.setName("歌曲" + i);
			m.setGeshou("歌手" + i);
			m.setSize("5:2" + i);
			m.setZhuanji("专辑" + i);
			list.add(m);
		}
                  //将数据放在队列中
		request.setAttribute("list", list);

		if (flag.equals("xml")) {
			request.getRequestDispatcher("xml.jsp").forward(request, response);
		}else{
			request.getRequestDispatcher("json.jsp").forward(request, response);	
		}
	}

}

java bean 

package pojo;

public class Music {

	private String name;
	private String geshou;
	private String size;
	private String zhuanji;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getGeshou() {
		return geshou;
	}

	public void setGeshou(String geshou) {
		this.geshou = geshou;
	}

	public String getSize() {
		return size;
	}

	public void setSize(String size) {
		this.size = size;
	}

	public String getZhuanji() {
		return zhuanji;
	}

	public void setZhuanji(String zhuanji) {
		this.zhuanji = zhuanji;
	}

}

 

xml格式显示

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%@ page import="java.util.*,pojo.*"%>

<%
	//取数据
    ArrayList<Music> list = (ArrayList<Music>)request.getAttribute("list");
    if(list!=null){//如果list存在,就将队列中的数据包装成xml格式的数据输出
%>
	<?xml version='1.0' encoding='UTF-8'?>
	<musiclist>

 <%
 	for(int i=0;i<list.size();i++){
 		Music m = list.get(i);
 %> 
 	<music>
 		<name><%=m.getName() %></name>
 		<geshou><%=m.getGeshou() %></geshou>
 		<zhuanji><%=m.getZhuanji() %></zhuanji>
 		<size><%=m.getSize() %></size>
 	</music>
 <%
 	}
 %>
 </musiclist>
  <%
 	}
 %>

 

json格式显示

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>

<%@ page import="java.util.*,pojo.*"%>

<%
	//取数据
    ArrayList<Music> list = (ArrayList<Music>)request.getAttribute("list");
    if(list!=null){//如果list存在,就将队列中的数据包装成xml格式的数据输出
%>
	<?xml version='1.0' encoding='UTF-8'?>
	<musiclist>

 <%
 	for(int i=0;i<list.size();i++){
 		Music m = list.get(i);
 %> 
 	<music>
 		<name><%=m.getName() %></name>
 		<geshou><%=m.getGeshou() %></geshou>
 		<zhuanji><%=m.getZhuanji() %></zhuanji>
 		<size><%=m.getSize() %></size>
 	</music>
 <%
 	}
 %>
 </musiclist>
  <%
 	}
 %>

 

 

 

android格式端 访问服务器

 

1,访问图片  输入图片的地址  点击按钮获取图片

public class SecondActivity extends Activity {

	private EditText pathView;
	private ImageView imgView;
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.activity_second);
		pathView = (EditText) this.findViewById(R.id.pathView);

		imgView = (ImageView) this.findViewById(R.id.imgView);

		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case 100:
					Bitmap bmp = (Bitmap) msg.obj;
					imgView.setImageBitmap(bmp);
					break;

				default:
					break;
				}
			}
		};

	}

	public void connServer(View v) {
		// 获取地址.地址必须是http开头的
		String path = pathView.getText().toString().trim();

		if (!path.startsWith("http://")) {
			path = "http://" + path;
		}

		new MyThread(path).start();

	}

	class MyThread extends Thread {
		String path;

		public MyThread(String path) {
			this.path = path;
		}

		public void run() {
			try {
				// 要请求的Uri地址
				URL url = new URL(path);
				// 通过URL建立一个连接
				HttpURLConnection conn = (HttpURLConnection) url
						.openConnection();
				// 设置请求方式
				conn.setRequestMethod("GET");
				// 设置超时时间
				conn.setConnectTimeout(5000);

				// 获得输入流
				InputStream ips = conn.getInputStream();

				// 定义一个字节数组输出流
				ByteArrayOutputStream bos = new ByteArrayOutputStream();
				// 读取一个字节
				int t = ips.read();
				while (t != -1) {
					// 将读取到的直接写到字节数组输出流
					bos.write(t);
					// 读取下一个字节
					t = ips.read();
				}

				// 将字节数组输出流中的字节写入数组
				byte[] bs = bos.toByteArray();

				// 通过字节数组创建一个图片对象
				Bitmap bmp = BitmapFactory.decodeByteArray(bs, 0, bs.length);

				Message msg = handler.obtainMessage(100);
				msg.obj = bmp;
				handler.sendMessage(msg);

			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	};

}

 

 

 

2,基于http的post和get请求

public class ClientActivity extends Activity {

	private EditText pathView;
	private TextView imgView;
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.activity_xml);

		pathView = (EditText) this.findViewById(R.id.pathView);
		imgView = (TextView) this.findViewById(R.id.imgView);

		handler = new Handler() {
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case 100:
					String str = (String) msg.obj;
					imgView.setText(str);
					break;

				}

			}
		};

	}

	public void connServer(View v) {
		// 要请求的地址
		String path = pathView.getText().toString().trim();
		if (!path.startsWith("http://")) {
			path = "http://" + path;
		}

		new MyThreadPost(path).start();

	}

	// 基于HttpClient发送Get请求
	class MyThread extends Thread {

		String path;

		public MyThread(String path) {
			this.path = path;
		}

		public void run() {
			try {
				// 定义客户端对象
				HttpClient client = new DefaultHttpClient();
				// 定义要发送的请求对象
				HttpGet get = new HttpGet(path);
				// 发送请求,返回响应对象
				HttpResponse response = client.execute(get);
				// 如果响应成功
				if (response.getStatusLine().getStatusCode() == 200) {
					// 获得返回的数据
					HttpEntity entity = response.getEntity();
					String str = EntityUtils.toString(entity);

					Message msg = handler.obtainMessage(100);
					msg.obj = str;

					handler.sendMessage(msg);
				}

			} catch (Exception e) {
				e.printStackTrace();
			}
		}
	}

	// 基于HttpClient发送Post请求
	class MyThreadPost extends Thread {
		String path;

		public MyThreadPost(String path) {
			this.path = path;
		}

		public void run() {
			try {
				// 定义客户端对象
				HttpClient client = new DefaultHttpClient();
				// 包装Post请求对象
				HttpPost post = new HttpPost(path);
				// 数据源
				ArrayList<NameValuePair> nvpList = new ArrayList<NameValuePair>();
				NameValuePair nvp = new BasicNameValuePair("flag", "xml");
				nvpList.add(nvp);

				// 定义要提交的数据实体
				UrlEncodedFormEntity entity = new UrlEncodedFormEntity(nvpList);
				// 设置要提交的数据
				post.setEntity(entity);

				// 发送请求
				HttpResponse response = client.execute(post);

				if (response.getStatusLine().getStatusCode() == 200) {
					// 获得返回的数据
					HttpEntity entity2 = response.getEntity();
					String str = EntityUtils.toString(entity2);

					Message msg = handler.obtainMessage(100);
					msg.obj = str;

					handler.sendMessage(msg);
				}

			} catch (Exception ef) {
				ef.printStackTrace();
			}

		}
	}

}

 

 

3,HttpURLConnection 的post请求

public class PostActivity extends Activity {

	private EditText pathView;
	private TextView imgView;
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.activity_xml);
		pathView = (EditText) this.findViewById(R.id.pathView);

		imgView = (TextView) this.findViewById(R.id.imgView);

		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case 100:
					byte[] bs = (byte[]) msg.obj;
					String str = new String(bs);
					imgView.setText(str);

					break;

				default:
					break;
				}
			}
		};

	}

	public void connServer(View v) {
		// 获取地址.地址必须是http开头的
		String path = pathView.getText().toString().trim();

		if (!path.startsWith("http://")) {
			path = "http://" + path;
		}

		new MyThread(path).start();

	}

	class MyThread extends Thread {
		String path;

		public MyThread(String path) {
			this.path = path;
		}

		public void run() {
			try {
				
				// 要请求的Uri地址
				URL url = new URL(path);
				// 通过URL建立一个连接
				HttpURLConnection conn = (HttpURLConnection) url
						.openConnection();
				// 设置请求方式为Post
				conn.setRequestMethod("POST");
				// 设置超时时间
				conn.setConnectTimeout(5000);
				//设置允许输出数据
				conn.setDoOutput(true);
				
				//准备要发送的数据
				String data = "flag=张三";
				
				//定义Post方式的数据标头
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
		conn.setRequestProperty("Content-Length", ""+data.getBytes().length);

				//获得输出流,写出数据
				OutputStream ops = conn.getOutputStream();
				ops.write(data.getBytes());
				ops.flush();
				ops.close();
				
		System.out.println("conn.getResponseCode()"+conn.getResponseCode());
				if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
					// 获得输入流
					InputStream ips = conn.getInputStream();

					// 定义一个字节数组输出流
					ByteArrayOutputStream bos = new ByteArrayOutputStream();
					// 读取一个字节
					int t = ips.read();
					while (t != -1) {
						// 将读取到的直接写到字节数组输出流
						bos.write(t);
						// 读取下一个字节
						t = ips.read();
					}

					// 将字节数组输出流中的字节写入数组
					byte[] bs = bos.toByteArray();

					Message msg = handler.obtainMessage(100);
					msg.obj = bs;
					handler.sendMessage(msg);
				} else {
					Message msg = handler.obtainMessage(100);
					msg.obj = "响应失败!".getBytes();
					handler.sendMessage(msg);

				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	};

}

 

4,HttpURLConnection 的get请求

public class XMLActivity extends Activity {

	private EditText pathView;
	private TextView imgView;
	private Handler handler;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		this.setContentView(R.layout.activity_xml);
		pathView = (EditText) this.findViewById(R.id.pathView);

		imgView = (TextView) this.findViewById(R.id.imgView);

		handler = new Handler() {
			@Override
			public void handleMessage(Message msg) {
				switch (msg.what) {
				case 100:
					byte[] bs = (byte[]) msg.obj;
					String str = new String(bs);
					imgView.setText(str);

					break;

				default:
					break;
				}
			}
		};

	}

	public void connServer(View v) {
		// 获取地址.地址必须是http开头的
		String path = pathView.getText().toString().trim();

		if (!path.startsWith("http://")) {
			path = "http://" + path;
		}

		new MyThread(path).start();

	}

	class MyThread extends Thread {
		String path;

		public MyThread(String path) {
			this.path = path;
		}

		public void run() {
			try {
				//获得参数
				String arg  = path.substring(path.lastIndexOf("=")+1);
				//对参数的值进行编码
				arg = URLEncoder.encode(arg, "UTF-8");
				//先截取掉原来的参数值,在加上编码后的参数值
				path= path.substring(0,path.lastIndexOf("=")+1)+arg;
				System.out.println(">>>>>>>>>"+path);
				// 要请求的Uri地址
				URL url = new URL(path);
				// 通过URL建立一个连接
				HttpURLConnection conn = (HttpURLConnection) url
						.openConnection();
				// 设置请求方式
				conn.setRequestMethod("GET");
				// 设置超时时间
				conn.setConnectTimeout(5000);

				if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
					// 获得输入流
					InputStream ips = conn.getInputStream();

					// 定义一个字节数组输出流
				ByteArrayOutputStream bos = new ByteArrayOutputStream();
					// 读取一个字节
					int t = ips.read();
					while (t != -1) {
						// 将读取到的直接写到字节数组输出流
						bos.write(t);
						// 读取下一个字节
						t = ips.read();
					}

					// 将字节数组输出流中的字节写入数组
					byte[] bs = bos.toByteArray();

					Message msg = handler.obtainMessage(100);
					msg.obj = bs;
					handler.sendMessage(msg);
				} else {
					Message msg = handler.obtainMessage(100);
					msg.obj = "响应失败!!";
					handler.sendMessage(msg);

				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}

	};

}

 

0
1
分享到:
评论

相关推荐

    android网络开发与应用实战详解源码

    《Android网络开发与应用实战详解》一书深入浅出地介绍了Android系统中如何实现网络通信,并提供了丰富的源码示例。这本书涵盖的内容广泛,包括基础的HTTP请求、数据解析、网络状态管理以及高级的WebSocket通信和...

    Android 网络摄像头实现

    以下是关于Android网络摄像头实现及其相关技术的详细解释: 1. **Socket通信**: Socket是TCP/IP协议族的一部分,提供了进程间通信的能力,允许不同设备间的应用程序之间进行双向数据传输。在Android网络摄像头...

    android 网络速率实时显示

    在Android开发中,实现"android 网络速率实时显示"功能涉及到多个核心知识点,包括网络数据的获取、服务(Service)的使用、悬浮窗(FloatingWindow)的创建与管理等。以下将逐一详解这些技术点。 首先,**网络数据...

    android网络开发原理

    总之,Android网络开发是一个包含多个层面的复杂主题,包括基本的网络协议、Android特有的API使用、安全性和性能优化等。开发者需要深入理解这些原理,才能在实践中编写出高效、稳定的网络应用。

    android网络测速app源代码

    【Android网络测速App源代码】是一个专门为Android平台设计的应用程序,用于测试设备的网络速度,包括上传和下载的速度。这个App不仅提供了基本的测速功能,还具有记录查询和结果保存到TXT文件的能力,同时结合了...

    android 网络编程简介

    1. Android网络编程概述 Android网络编程是指在Android平台上开发能够处理网络请求的应用程序的编程实践。这通常涉及实现客户端与服务器之间的数据交换,使用不同的网络协议如HTTP/HTTPS以及进行网络状态监控等。 2...

    精通android网络开发

    "精通Android网络开发"意味着你需要深入理解网络通信的基本原理,并能熟练运用各种技术来实现Android应用与服务器之间的数据交换。以下是一些关于Android网络开发的重要知识点: 1. **HTTP/HTTPS协议**:Android...

    android网络开发技术实战详解电子书

    《Android网络开发技术实战详解》是一本专注于Android平台网络编程的专著,旨在帮助开发者深入理解和实践Android应用程序中的网络通信技术。这本书详细介绍了如何在Android应用中实现各种网络功能,如HTTP请求、数据...

    精通ANDROID网络开发.part1

    精通ANDROID网络开发.part1 由于上传限制,此书籍采用分卷压缩,需要与 精通ANDROID网络开发.part2一起才能正常解压使用

    android网络编程基础

    本节将深入探讨Android网络编程的基础知识,主要围绕Java网络编程这一核心概念展开。 首先,理解Android网络编程的基础概念至关重要。在Android中,网络操作通常在后台线程中执行,以避免阻塞主线程导致应用无响应...

    android网络操作

    本文将深入探讨“Android网络操作”的核心概念、常用方法以及如何利用封装好的框架进行高效开发。 一、Android网络访问基础 在Android中,网络操作主要依赖于java.net和HttpURLConnection类库,但出于性能和易用性...

    《Android网络开发技术实战详解》 PDF

    《Android网络开发技术实战详解》以Android网络应用程序的开发为主题,从底层原理开始讲起,结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程。《Android网络开发技术实战详解》的...

    《android网络开发与应用实战详解>光盘代码

    《Android网络开发与应用实战详解》是一本深入探讨Android平台上的网络编程技术的书籍,由人民邮电出版社出版,作者王东华。这本书通过实践案例,详细讲解了如何在Android应用中实现各种网络功能,包括数据的获取、...

    android网络加载显示进度条

    "android网络加载显示进度条"这一主题主要涉及两个关键概念:ProgressDialog和多线程(Thread)。下面将详细介绍这两个知识点。 首先,ProgressDialog是Android系统提供的一个对话框组件,它允许开发者创建一个带有...

    Android网络请求指定WiFi或者4G

    Android网络请求,存在多网络的情况下(比如同时开启了移动网络和WiFi),网络请求优先走WiFi,如果想强制切换网络,看代码里面即可

    一款android网络收音机.

    以下是对这个“android网络收音机”应用的一些关键知识点的详细解释: 1. **Android开发基础**:这个应用是用Java或Kotlin语言编写的,基于Android SDK进行开发。开发者需要对Android的四大组件(Activity、Service...

    Android网络开发技术实战详解(文字版)

    《Android网络开发技术实战详解》是一本专注于Android平台网络编程的实用指南,旨在帮助开发者深入理解网络技术在Android应用中的实现。这本书以详实的记录和丰富的内容为特点,不仅覆盖了网络通信的基础知识,还...

    Android网络开发从入门到精通源码_张余

    本资料"Android网络开发从入门到精通源码"由张余提供,旨在帮助开发者系统地学习并掌握Android平台上的网络编程技术。 一、Android网络基础 在Android中,我们主要通过HttpURLConnection、HttpClient(已废弃)、...

    《Android网络开发从入门到精通》.张余.part4

    《Android网络开发从入门到精通》.张余版,总大小为226MB,只能分4部分上传,需要的并没分的给我留言,留下邮箱或其它方式,看到后我发给你们,免费。

    android网络知识

    Android网络框架的另一个重要部分是Android的Service组件,它可以在后台持续运行,处理长时间的网络任务,避免阻塞UI线程。IntentService是一种特殊的Service,适合执行单一的任务并自动停止服务。除此之外,还可以...

Global site tag (gtag.js) - Google Analytics