- 浏览: 677168 次
- 性别:
- 来自: 安徽
文章分类
- 全部博客 (252)
- Html/Div+CSS (12)
- Js/Jquery (34)
- Flex (2)
- Ajax (3)
- Java (35)
- C# (15)
- Spring (16)
- Hibernate (13)
- Struts2 (12)
- Struts1 (7)
- DWR (1)
- iBatis/myBatis (9)
- Tag(JSTL、EL) (1)
- Android (44)
- SQL (7)
- SEO (7)
- Exception (3)
- Tool (10)
- Other (3)
- WebService (9)
- Apache (7)
- Ext (0)
- Utils (12)
- thinking in programme (2)
- Hadoop (0)
- ActiveMQ (0)
- HTML5/CSS3 (0)
- WPF (1)
- NodeJs (1)
- 设计模式 (0)
- 程序人生 (1)
- 随笔 (1)
- Linux (1)
- Load Balance (0)
最新评论
-
drinkjava2:
太复杂了而且不通用,利用ThreadLocal可完美解决这一问 ...
JDBC的多条件动态查询 -
u013107014:
multipartRequest.getFiles(" ...
多文件上传 by MultipartFile and Multiple -
liyys:
可惜没讲你mysql数据库的表的设计
iBatis入门 -
Mapple_leave:
效果还是挺不错的,谢谢了。
中文简体与繁体的转换 -
arcpad:
JS禁用浏览器退格键
与Web服务器交互:
如果手机要想与 web 容器交互的话,那么就必须依靠 Http 协议完成。
一、通过地址重新访问动态 Web
首先我们需要建立一个 Web 程序,现在为了说明问题,我们简单见一个 Servlet ,然后返回 true or false 即可
服务器端: AndroidServlet.java
package com.iflytek.demo; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class AndroidServlet */ public class AndroidServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public AndroidServlet() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub //http://IP:8080/09AndroidWeb/AndroidServlet?name=xdwang&password=1111 String name = request.getParameter("name"); String password = request.getParameter("password"); if ("xdwang".equals(name) && "1111".equals(password)) { response.getWriter().println("true"); } else { response.getWriter().println("false"); } } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } }
客户端:
Web01_Activity.java
package com.iflytek.demo; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; public class Web01_Activity extends Activity { private TextView infoTxt; public Handler handler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: infoTxt.setText(msg.obj.toString()); break; default: break; } } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); infoTxt = (TextView) super.findViewById(R.id.info); this.HttpHelper(); } private void HttpHelper() { final AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { @Override protected void onPostExecute(String result) { final String temp = result; Thread thread = new Thread(new Runnable() { @Override public void run() { Message msg = new Message(); msg.what = 1; msg.obj = temp; handler.sendMessage(msg); } }); thread.start(); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... arg0) { boolean flag = false; // 成功与否的标记 try { URL url = new URL("http", "IP", 8080, "/09AndroidWeb/AndroidServlet?name=xdwang&password=1111"); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); byte data[] = new byte[512];// 开辟一个空间 int len = conn.getInputStream().read(data); // 输入流读取 if (len > 0) { // 已经读取到内容 String temp = new String(data, 0, len).trim(); flag = Boolean.parseBoolean(temp); // 取出里面的boolean型数据 } conn.getInputStream().close(); } catch (Exception e) { return "WEB服务器连接失败!"; } if (flag) { return "用户登录成功!"; } else { return "用户登录失败!"; } } }; task.execute(); } }
AndroidManifest.xml需要添加网络访问权限
<uses-permission android:name="android.permission.INTERNET" />
总结,这种方式是地址重写的方式完成,但是我们知道地址重写是 Get 请求方式,从上面的 Servlet 类的处理也可以看出是 Get 请求,但是这种方式会收到地址传输的限制,所以这时候我们也可以使用 post 请求方式提交。
二、 POST 请求
Get 请求与 Post 请求最大的区别在于一个地址显示,一个不显示,具体可以看我写的 GET 与 POST 请求 。 可是如何在 Android 中实现 post 请求呢?严格来说,之前的程序并不标准,地址重写问题较多。
使用 POST 提交访问动态 WEB 所需要的操作类:
由于 WEB 连接采用的是 HTTP 操作协议进行的,所以用户想要发送请求( POST 、 GET )则可以使用 org.apache.http.client.methods.HttpPost 类或者是 org.apache.http.client.methods.HttpGet 类进行。
当用户成功的向 Web Server 端发送请求后,所有返回的数据将使用 org.apache.http.HttpResponse 接口保存。
当用户使用 HttpResponse 的 getEntity() 方法接受所有返回数据之后,可以使用 EntityUtils 类进行处理,而且由于 HttpResponse 是一个接口,所以要想实例化此接口,就要使用 org.apache.http.impl.client.DefaultHttpClient 类完成。
由于在 Web Server 上所提供的方法需要参数的传递,所以所有的参数都要使用 org.apache.http.message.BasicName.ValuePair 类进行封装。
除了处理好参数之外,还需要处理请求时的所需要的编码,通用的编码为 UTF-8 ,而要想指定此编码则必须使用 org.apache.http.client.entry.UrlEncodedFormEntity 类完成。
此时把服务器端的 doPost 中再去调用 doGet 方法:
客户端 Web02_Activity.java
package com.iflytek.demo; import java.util.ArrayList; import java.util.List; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.TextView; public class Web02_Activity extends Activity { private TextView infoTxt = null; private static final String URL = "http://IP:8080/09AndroidWeb/AndroidServlet"; // 请求地址 public Handler handler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: infoTxt.setText(msg.obj.toString()); break; default: break; } } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.infoTxt = (TextView) super.findViewById(R.id.info); this.HttpHelper(); } private void HttpHelper() { final AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { @Override protected void onPostExecute(String result) { final String temp = result; Thread thread = new Thread(new Runnable() { @Override public void run() { Message msg = new Message(); msg.what = 1; msg.obj = temp; handler.sendMessage(msg); } }); thread.start(); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... arg0) { boolean flag = false; // 成功与否的标记 try { HttpPost request = new HttpPost(URL); List<NameValuePair> params = new ArrayList<NameValuePair>(); params.add(new BasicNameValuePair("name", "xdwang")); params.add(new BasicNameValuePair("password", "1111")); request.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8)); HttpResponse response = new DefaultHttpClient() .execute(request); if (response.getStatusLine().getStatusCode() != 404) { // 现在已经发现了数据了 flag = Boolean.parseBoolean(EntityUtils.toString( response.getEntity()).trim()); } } catch (Exception e) { return "WEB服务器连接失败!"; } if (flag) { return "用户登录成功!"; } else { return "用户登录失败!"; } } }; task.execute(); } }
三、网络读取图片
服务器端:
先设计一个返回图片流的工具类
ImageUtil.java
package com.iflytek.util; import java.awt.image.BufferedImage; import java.io.FileInputStream; import java.io.IOException; import java.text.MessageFormat; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; public class ImageUtil { /** * @descrption * @author xdwang * @create 2012-11-16下午8:35:36 * @param response * @param path * 文件路径 * @param type * 图片类型 */ public static void showImage(HttpServletResponse response, String path, String type) { try { ServletOutputStream outStream = response.getOutputStream();// 得到向客户端输出二进制数据的对象 FileInputStream fis = new FileInputStream(path); // 以byte流的方式打开文件 // 读数据 byte data[] = new byte[1000]; while (fis.read(data) > 0) { outStream.write(data); } fis.close(); response.setContentType(MessageFormat.format("image/{0}", type)); // 设置返回的文件类型 outStream.write(data); // 输出数据 outStream.close(); } catch (IOException e) { e.printStackTrace(); } } /** * @descrption * @author xdwang * @create 2012-11-16下午8:35:48 * @param response * @param data * byte数组 * @param type * 图片类型 */ public static void showImage(HttpServletResponse response, byte[] data, String type) { try { ServletOutputStream outStream = response.getOutputStream();// 得到向客户端输出二进制数据的对象 // 读数据 outStream.write(data); response.setContentType(MessageFormat.format("image/{0}", type)); // 设置返回的文件类型 outStream.write(data); // 输出数据 outStream.close(); } catch (IOException e) { e.printStackTrace(); } } }
AndroidServlet.java
package com.iflytek.servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.iflytek.util.ImageUtil; /** * Servlet implementation class AndroidServlet */ public class AndroidServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public AndroidServlet() { // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub ImageUtil.showImage(response, getServletContext().getRealPath("Java.jpg"), "jpeg"); } }
Android客户端:
Web03_Activity.java
package com.iflytek.demo; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import android.app.Activity; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.widget.ImageView; public class Web03_Activity extends Activity { private ImageView iamgeView = null; private static final String PATH = "http://IP:8080/09AndroidWeb/Java.jpg"; // 请求地址 private Bitmap bitmap; public Handler handler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); switch (msg.what) { case 1: try { iamgeView.setImageBitmap(bitmap); } catch (Exception e) { } break; default: break; } } }; /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.iamgeView = (ImageView) super.findViewById(R.id.img); this.HttpHelper(); } private void HttpHelper() { final AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { @Override protected void onPostExecute(String result) { Thread thread = new Thread(new Runnable() { @Override public void run() { Message msg = new Message(); msg.what = 1; handler.sendMessage(msg); } }); thread.start(); } @Override protected void onPreExecute() { super.onPreExecute(); } @Override protected String doInBackground(Void... arg0) { ByteArrayOutputStream bos = null; // 内存操作流完成 try { URL url = new URL(PATH); HttpURLConnection conn = (HttpURLConnection) url .openConnection(); conn.connect(); InputStream input = conn.getInputStream(); bitmap = BitmapFactory.decodeStream(input); // bos = new ByteArrayOutputStream(); // byte data[] = new byte[1024]; // int len = 0; // while ((len = input.read(data)) != -1) { // bos.write(data, 0, len); // } // byte resultData[] = bos.toByteArray(); // bitmap = BitmapFactory.decodeByteArray(resultData, 0, // resultData.length); // 把二进制变为图片 } catch (Exception e) { } finally { if (bos != null) { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } } return null; } }; task.execute(); } }
发表评论
-
This version of ADT requires android SDK
2013-07-25 16:45 1604Windows系统下用Eclipse开发工具开发An ... -
Android学习13-----网络通信(4) WebView组件
2012-11-27 09:18 2523WebView 是一个开发的浏览 ... -
Android学习13-----网络通信(3) 与Web Service进行通讯
2012-11-26 09:40 1901这里我们的WebService使用xFire开发。 ... -
Android学习13-----网络通信(2) 与Socket交换数据
2012-11-23 09:11 3313对于网络开发而言,最常用的交互模式:WebService、We ... -
Android学习11-----多媒体技术(5) 媒体录制
2012-11-16 08:10 1899在Android中通过android.media ... -
Android学习11-----多媒体技术(4) 使用摄像头拍照,多点触控
2012-11-15 08:37 2896一、摄像头拍照 前面说媒体播放 时了解了 ... -
Android学习11-----多媒体技术(3) 媒体播放
2012-11-14 08:25 1423在 Androi ... -
Android学习11-----多媒体技术(2) Animation
2012-11-13 08:47 2002一、渐变动画, Tweened Animation ... -
Android学习11-----多媒体技术(1) 绘制简单图形,Bitmap,Matrix
2012-11-12 08:48 1632一、绘制简单图 ... -
Android学习12-----手机服务(4) 传感器
2012-11-19 09:13 2026传感器一般用于游戏中,在 Android 系统中为 ... -
Android学习12-----手机服务(1) 取得电池电量和声音服务:AudioManager
2012-11-18 11:18 3517一、取得电池电量信息 ... -
Android学习10-----Android组件通信 (8) 桌面显示组件:AppWidget
2012-11-02 08:36 2044一、 AppWidget 在使用 Androi ... -
Android学习10-----Android组件通信 (7) 广播机制:Broadcast
2012-11-01 08:43 1523一、 广播: 广播也是一种信息的发送机制,在 ... -
Android学习10-----Android组件通信 (6) PendingIntent
2012-10-31 08:20 2276Intent 的主要功能是表示用 ... -
Android学习10-----Android组件通信 (5) Service
2012-10-30 08:25 1748Service 基本组成: ... -
Android学习10-----Android组件通信 (4) 消息机制
2012-10-29 08:22 1560在 Android 操作系统中存在着消息队列的操作 ... -
Android学习10-----Android组件通信 (3) ActivityGroup
2012-10-26 08:23 2340导航栏在 Android 中的应用是很常见的,前面 ... -
Android学习10-----Android组件通信 (2) Activity生命周期
2012-10-25 08:16 1293Activity 是整个 Android 平台的基 ... -
Android学习10-----Android组件通信 (1) Intent
2012-10-24 08:43 2029在一个项目之中,会由多个 Activity ... -
Android判断是否有网络连接
2013-04-25 16:34 1447Android中判断有时候因为功能的需求,需要判断是否有网络 ...
相关推荐
在Android开发中,实现客户端与Web服务器的数据交换是一项常见的任务,尤其在移动应用需要与远程数据库交互时。本文将深入探讨“Android客户端远程登录Web服务器数据交换实例”,讲解如何使用MySQL数据库、JSON数据...
在移动应用开发中,有时我们需要与服务器进行数据交互,这时候Web服务接口就显得尤为重要。ksoap2-android-assembly-3.6.2-jar-with-dependencies是一个专门为Android平台设计的轻量级库,它简化了SOAP(Simple ...
kSOAP2是一个轻量级的开源库,专为在...总之,kSOAP2-android是Android开发者与Web服务交互的利器,通过其提供的简单API,可以轻松实现SOAP请求的构建、发送和响应处理,极大地简化了客户端与服务器之间的数据交换。
ksoap2-android-assembly-2.6.0-jar-with-dependencies.jar是一个重要的库文件,它是Android开发者调用Web服务接口的必备工具,尤其适用于那些希望简化网络通信的开发者。 kSOAP2是一个轻量级的开源项目,它提供了...
在Android应用开发中,与服务器进行通信是必不可少的环节,特别是在构建涉及用户登录、数据交换等应用场景时。本文将深入探讨Android与服务器通信的基本概念、技术选型以及具体实现方式,以标题“android与服务器...
在Android平台上开发一款视频资讯客户端,涉及到的主要技术点包括网络通信、数据解析、UI布局以及数据展示。...通过合理运用Android提供的工具和库,可以有效地实现客户端与Web服务器之间的数据交换和展示。
在移动开发领域,尤其是Android平台,与服务器进行数据交互是不可或缺的一部分。为了实现这一目标,开发者通常会利用Web Service技术,而KSOAP2是一个非常流行的库,它为Android应用程序提供了方便的Web Service...
在Android开发中,与远程服务器进行数据交换是常见的需求,而SOAP是一种基于XML的协议,广泛用于Web服务交互。kSOAP2库简化了这个过程,提供了方便的API来封装和解封SOAP消息,进行HTTP传输,并处理返回的数据。 ...
【标题】"android-rmpt-red5-web" 涉及的是一个Android应用程序与Red5服务器之间的交互,主要关注实时多媒体传输(RMT)技术在Web服务端的应用。Red5是一个开源流媒体服务器,能够处理视频、音频流以及数据应用。在...
在Android平台上实现一个简单的网页服务器是一项有趣的挑战,它允许设备作为一个小型Web服务器运行,从而能够提供本地内容或者进行一些测试。这个项目的核心是利用Android系统的网络功能来搭建一个微型HTTP服务器,...
1. **Android与服务器通信基础** - **HTTP/HTTPS协议**:Android应用通常通过HTTP或更安全的HTTPS协议与服务器进行数据交换,理解这些协议的工作原理和请求响应机制是基础。 - **网络请求库**:如Volley、OkHttp、...
综上所述,Android客户端与服务器通信并使用JSON进行数据交互是一个涉及网络编程、JSON处理、服务器框架理解等多个层面的复杂过程。在实际开发中,需要对每个环节都有深入的理解,才能有效地实现客户端与服务器的...
本示例主要探讨的是Android客户端如何通过HTTP协议与Java Web服务器进行非Socket方式的数据交换,这非常适合初学者学习和理解网络通信的基本概念。 首先,让我们了解HTTP协议。HTTP(超文本传输协议)是一种用于...
### 数据通信—成为Android数据流...无论是对于存储扩展、设备间的数据传输还是网络通信,都有对应的解决方案和技术支持。希望开发者们能够以此为基础,深入探索这些技术的应用,并在实际项目中发挥出它们的最大价值。
"老罗Android开发 7服务器端Web编程"课程可能涵盖了如何在Android客户端与Web服务器进行有效的数据通信,以及如何设计和实现服务器端的Web服务。这里我们将详细探讨相关知识点。 首先,Web服务器端编程通常涉及到的...
在Android应用开发中,手机客户端与Web服务器的通信是一个核心环节,主要依赖于HTTP协议进行数据交换。本文将深入探讨这一过程,分为客户端发送请求、服务器接收与响应、客户端提取响应数据三个部分。 1. 客户端向...
这是一份对希望提升Android网络通信能力的开发者极具价值的资料。文档中强调了Android应用中的网络权限请求和基础网络操作,也提到了多种相关技术,其中包括服务器端技术和前端技术,显示了Android开发中网络编程的...
【标题】"登录web服务器jsonAndroid"涉及到的主要...综上所述,"登录web服务器jsonAndroid"涵盖了Android网络编程、JSON数据交换、服务器交互和UI设计等多个方面,对于理解和实现Android应用中的用户登录功能至关重要。
在Android开发中,JSON(JavaScript Object Notation)是一种常见的数据交换格式,被广泛应用于服务器与客户端之间的通信。本文将深入探讨如何在Android中利用JSON进行网络数据交换,包括服务端和客户端的实现。 ...