Android客户端与服务端之间传递json数据
服务端:mysql+hibernate;
客户端:android
最近自己在做聊天软件的时候要在服务端和客户端之间进行数据传递,开始得时候使用socket,后来发现使用socket有点局限性,所以改用了http的方式,摸索了两天,终于连通了服务端和客户端
思路:
1.服务端提供接收数据的servlet
2.客户端将需要发送的数据转换成json格式
3.客户端启动线程,将json数据放入request请求中,通过httpclient发送至服务端
4.服务端通过request拿到输入流,解析为json数据
5.服务端进行业务逻辑处理(若无需进行进行业务逻辑处理,此步骤可省略)
6.将需要返回的数据或业务逻辑处理结果转换成json格式,通过response的流将json数据输出给客户端
7.客户端通过response获取流,解析成json数据
8.若需要更新UI,则通过handler将数据发送回主线程,更新UI
服务端代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
package com.durian.fc.server.servlet;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.durian.fc.server.entity.User;
import com.durian.fc.server.service.UserManager;
import net.sf.json.JSONObject;
public class RegisterServlet extends HttpServlet {
private static final long serialVersionUID = 541282327938079229L;
private UserManager manager = new UserManager();
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
doPost(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
StringBuilder sb = new StringBuilder();
String s = null;
BufferedReader br = new BufferedReader(new InputStreamReader(req.getInputStream()));
while((s=br.readLine())!=null){
sb.append(s);
}
JSONObject jo= JSONObject.fromObject(sb.toString());
String password = jo.getString("password");
String phone = jo.getString("phone");
System.out.println(s);
Boolean b = false;
b = manager.saveUser(password,phone);
jo.clear();
jo.put("isExit", b);
PrintWriter pw = resp.getWriter();
pw.write(jo.toString());
}
}
|
客户端工具类代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
package com.durian.fc.client.utils;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.CoreConnectionPNames;
import org.json.JSONObject;
import android.util.Log;
public class HttpUtils {
public final static int METHOD_GET = 1;
public final static int METHOD_POST = 2;
public static HttpEntity getHttpEntity(String uri,int method,JSONObject json){
HttpEntity entity = null;
HttpClient client = new DefaultHttpClient();
client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 10000);
client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,10000);
HttpUriRequest req = null;
switch (method) {
case METHOD_GET:
req = new HttpGet(uri);
break;
case METHOD_POST:
try {
Log.i("info", "post started");
req = new HttpPost(uri);
((HttpPost)req).setEntity(new StringEntity(json.toString()));
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
break;
}
try {
HttpResponse res = client.execute(req);
if(res.getStatusLine().getStatusCode() == HttpStatus.SC_OK){
return entity = res.getEntity();
}
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return entity;
}
public static InputStream getInputStream(HttpEntity entity){
InputStream in = null;
try {
if(entity!= null){
return in = entity.getContent();
}
} catch (IllegalStateException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return in;
}
|
客户端代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
jo.put("password", pass1);
new Thread(new Runnable() {
public void run() {
HttpEntity entity = HttpUtils.getHttpEntity("http://192.168.1.105:8080/FCS2/registerServlet", 2, jo);
InputStream in = HttpUtils.getInputStream(entity);
if(in!=null){
try {
BufferedReader br = new BufferedReader(new InputStreamReader(in));
StringBuilder sb = new StringBuilder();
String s = null;
while((s=br.readLine())!=null){
sb.append(s);
}
JSONObject jo2 = new JSONObject(sb.toString());
System.out.println(jo2.getBoolean("isExit"));
Message msg = Message.obtain(handler, 1, jo2.getBoolean("isExit"));
msg.sendToTarget();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}).start();
|
相关推荐
本文将深入探讨如何使用JavaScript调用Android的方法,并传递JSON数据,以实现两者之间的高效通信。 首先,我们需要了解`Android WebView`。WebView是Android系统提供的一种组件,它能够加载并显示网页内容,就像是...
本文将详细探讨 `$.post()` 的使用方法,特别是在传递 JSON 数据时的应用。 #### 一、`$.post()` 基础介绍 `$.post()` 是 jQuery 提供的一个用于发起 POST 请求的方法,它的基本语法如下: ```javascript $.post...
在本场景中,我们将探讨如何使用AJAX来传递JSON数组,并在Struts2的Action中接收和处理这些数据。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它易于人阅读和编写,同时也易于机器解析...
然而,当Vue通过Axios发送POST请求并以JSON格式传递数据时,后端的@RequestParam无法正常获取这些数据。 2. 问题代码示例 在问题代码中,前端使用Axios发送POST请求,数据以JSON格式封装: ```javascript axios....
Qt WebEngine json 数据相互传递 ,QT WebEngine 服务端传送JSON字符串到 网页端,网页端进行解析,网页端生成json字符串,QT 服务端进行解析。 编译环境vs2013 qt5.7
"前台Ajax与后台Json传递"这个主题就是关注如何高效地实现这一交互过程。Ajax(Asynchronous JavaScript and XML)技术允许我们在不刷新整个页面的情况下,实现局部数据的更新,而Json(JavaScript Object Notation...
总结,Android调用WebService并使用JSON传递实体对象涉及到多个步骤,包括选择合适的库(如ksoap2和Newtonsoft.Json),理解数据序列化和反序列化的过程,以及正确设置HTTP通信。通过这种方式,你可以高效地在客户端...
在ASP.NET MVC框架中,Json数据的传递是常见的数据交互方式,特别是在前后端分离的开发模式下,JSON(JavaScript Object Notation)已经成为Web应用程序间交换数据的主要格式。本篇文章将深入探讨Mvc中如何进行Json...
C#中通过直接添加引用的方来调用Web Service的方式不够灵活,故采取手动发送Http请求的方式来调用Web Service。最后选择使用Post方式来调用Web Service
在介绍aspx后台传递Json到前台的两种接收方法之前,我们先了解一些基础知识点。Json(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成,现在已经成为一种广泛...
这里,我们将深入探讨“app接口传递json格式参数”的主题,以及如何在Java后台实现这一功能。 首先,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也方便机器解析和生成...
PHP 基于 jQuery 的 Ajax 技术传递 JSON 数据简单实例 本文主要介绍了 PHP 基于 jQuery 的 Ajax 技术传递 JSON 数据方法,以完整实例形式分析了 PHP 基于 jQuery 的 Ajax 无刷新提交数据实现方法。下面是详细的知识...
但是WebView也可以传递一种很重要很常用的数据格式-json数据. 传递json和传递String数据是一样的,关键就是HTML5端对json数据通过eval()函数进行解析 传递过程中android端调用的最重要的一个函数就是: ...
这个主题“提交路径传递json参数(httpClient请求)”主要关注如何通过HttpClient发送包含JSON数据的POST请求。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,因其易读性和易于解析的特性,常用于...
总结来说,Ajax向Spring MVC传递JSON涉及的主要步骤包括前端的数据序列化、Ajax请求的发起、服务器端的参数绑定、业务处理及响应的JSON化。理解并熟练掌握这一流程对于进行高效的前后端数据交互至关重要。在实际项目...
标题"学习Servlet与JS的JSON传递"揭示了本项目的核心内容,即如何在Servlet和JavaScript之间通过JSON进行数据交换。在现代Web应用中,前端通常使用JavaScript库如jQuery来与后端交互,而JSON由于其结构清晰、易于...
Lotus Domino Java 代理获取传递值 JSON Lotus Domino 是一种基于Notes技术的服务器端应用程序, Lotus Domino Java 代理是指在 Domino 服务器上运行的 Java 代理程序,可以用来处理用户请求、提供数据服务等。今天...
本文将深入探讨如何在 Struts 框架中使用 JSON 传递数据到页面。 首先,我们需要了解 JSON 的基本结构。JSON 是一种数据交换格式,它以键值对的形式表示数据,例如: ```json { "name": "John", "age": 30, ...
"jQuery+json异步实现JSP和struts2之间的数据传递"是一个典型的应用场景,它结合了前端JavaScript库jQuery与后端MVC框架Struts2,通过JSON这种轻量级的数据交换格式进行高效的数据交互。下面我们将详细探讨这一主题...