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(); } } }; }
相关推荐
《Android网络开发与应用实战详解》一书深入浅出地介绍了Android系统中如何实现网络通信,并提供了丰富的源码示例。这本书涵盖的内容广泛,包括基础的HTTP请求、数据解析、网络状态管理以及高级的WebSocket通信和...
以下是关于Android网络摄像头实现及其相关技术的详细解释: 1. **Socket通信**: Socket是TCP/IP协议族的一部分,提供了进程间通信的能力,允许不同设备间的应用程序之间进行双向数据传输。在Android网络摄像头...
在Android开发中,实现"android 网络速率实时显示"功能涉及到多个核心知识点,包括网络数据的获取、服务(Service)的使用、悬浮窗(FloatingWindow)的创建与管理等。以下将逐一详解这些技术点。 首先,**网络数据...
总之,Android网络开发是一个包含多个层面的复杂主题,包括基本的网络协议、Android特有的API使用、安全性和性能优化等。开发者需要深入理解这些原理,才能在实践中编写出高效、稳定的网络应用。
【Android网络测速App源代码】是一个专门为Android平台设计的应用程序,用于测试设备的网络速度,包括上传和下载的速度。这个App不仅提供了基本的测速功能,还具有记录查询和结果保存到TXT文件的能力,同时结合了...
1. Android网络编程概述 Android网络编程是指在Android平台上开发能够处理网络请求的应用程序的编程实践。这通常涉及实现客户端与服务器之间的数据交换,使用不同的网络协议如HTTP/HTTPS以及进行网络状态监控等。 2...
本教程将深入探讨Android网络请求框架,帮助开发者理解和掌握这一核心技术。 一、Android网络请求的重要性 在移动设备上,应用程序通常需要访问互联网来获取实时数据,例如加载新闻、更新社交媒体状态或下载资源。...
《Android网络开发技术实战详解》是一本专注于Android平台网络编程的专著,旨在帮助开发者深入理解和实践Android应用程序中的网络通信技术。这本书详细介绍了如何在Android应用中实现各种网络功能,如HTTP请求、数据...
精通ANDROID网络开发.part1 由于上传限制,此书籍采用分卷压缩,需要与 精通ANDROID网络开发.part2一起才能正常解压使用
本节将深入探讨Android网络编程的基础知识,主要围绕Java网络编程这一核心概念展开。 首先,理解Android网络编程的基础概念至关重要。在Android中,网络操作通常在后台线程中执行,以避免阻塞主线程导致应用无响应...
本文将深入探讨“Android网络操作”的核心概念、常用方法以及如何利用封装好的框架进行高效开发。 一、Android网络访问基础 在Android中,网络操作主要依赖于java.net和HttpURLConnection类库,但出于性能和易用性...
《Android网络开发技术实战详解》以Android网络应用程序的开发为主题,从底层原理开始讲起,结合真实的案例向读者详细介绍了Android的基本组件的使用及应用程序开发的整个流程。《Android网络开发技术实战详解》的...
《Android网络开发与应用实战详解》是一本深入探讨Android平台上的网络编程技术的书籍,由人民邮电出版社出版,作者王东华。这本书通过实践案例,详细讲解了如何在Android应用中实现各种网络功能,包括数据的获取、...
Android网络请求,存在多网络的情况下(比如同时开启了移动网络和WiFi),网络请求优先走WiFi,如果想强制切换网络,看代码里面即可
以下是对这个“android网络收音机”应用的一些关键知识点的详细解释: 1. **Android开发基础**:这个应用是用Java或Kotlin语言编写的,基于Android SDK进行开发。开发者需要对Android的四大组件(Activity、Service...
"android网络加载显示进度条"这一主题主要涉及两个关键概念:ProgressDialog和多线程(Thread)。下面将详细介绍这两个知识点。 首先,ProgressDialog是Android系统提供的一个对话框组件,它允许开发者创建一个带有...
《Android网络开发技术实战详解》是一本专注于Android平台网络编程的实用指南,旨在帮助开发者深入理解网络技术在Android应用中的实现。这本书以详实的记录和丰富的内容为特点,不仅覆盖了网络通信的基础知识,还...
本资料"Android网络开发从入门到精通源码"由张余提供,旨在帮助开发者系统地学习并掌握Android平台上的网络编程技术。 一、Android网络基础 在Android中,我们主要通过HttpURLConnection、HttpClient(已废弃)、...
《Android网络开发从入门到精通》.张余版,总大小为226MB,只能分4部分上传,需要的并没分的给我留言,留下邮箱或其它方式,看到后我发给你们,免费。
Android网络框架的另一个重要部分是Android的Service组件,它可以在后台持续运行,处理长时间的网络任务,避免阻塞UI线程。IntentService是一种特殊的Service,适合执行单一的任务并自动停止服务。除此之外,还可以...