android如何传json字符串信息,Android与pc端socket通信--用json传递类信息

好久没玩安卓了,这两天又把以前一个未完成了小程序拿出来完善下,前面已经完成了socket通信,但只能传输简单的字符串信息,不能传递复杂的数据,如类似C++里的结构体,网上查了一遍,都说实现serializable接口来序列化,还有的用NDK,这个说太复杂,没试,最后问别人说用Json方便些,于是在网上找了下,发现真的比较简单,于是打算用它,刚开始找这个库花了点时间,最后干脆自己下了个源码自己编,最后总算能传递类信息了,下面说下我的步骤:

一、PC端

1.在网上好json的源码,我下的是0.5版本的,http://www.oschina.net/p/jsoncpp/,我在这里下的,目录内容如下:

a4c26d1e5885305701be709a3d33442f.png

2.我用VC++6.0创建了个静态库工程(空工程),然后把源码包里的src\lib_json和include\json下的所有文件都拷到该工程目录下,然后把这些文件添加到工程里,注意我不是把include\json目录拷过来的,所以要把几个文件中的#include啥的改成#include

"writer.h",各位编一下就能找到是哪几处地方了,好像只有4-5个地方。然后就能编出静态库来了。我编出来是buildjson.lib

3.然后把头文件和库放到自己的项目中去,这步最简单了

4.在自己的项目中添加要用到的jsonu头文件和库:

#include "json.h"

...

#pragma comment(lib, "buildjson.lib")

...

5.然后把socket接收到的Buf里的数据一个个取出来,我要android端定义了一个这样的类:

public class login_info implements Serializable

{

public String user_count;

public String

user_passwd;

public int user_id;

public login_info(String

user_count, String user_passwd, int user_id)

{

this.user_count = user_count;

this.user_passwd = user_passwd;

this.user_id = user_id;

}

}

然后在PC端我是这样解析的(这里只贴部分代码):

Json::Reader

reader; Json::Value

root; std::string

user_count;

std::string

user_passwd;

int

user_id ;

OutputDebugString(buf);//这里的buf是recv的参数。

if

(reader.parse(buf, root)) //

reader将Json字符串解析到root,root将包含Json里所有子元素 { user_count

= root["user_count"].asString(); //

访问节点user_count

user_passwd

= root["user_passwd"].asString(); //

访问节点user_passwd user_id

= root["user_id"].asInt(); //

访问节点user_id } OutputDebugString(user_count.c_str());

OutputDebugString(user_passwd.c_str());

这样,安卓端发送过来的数据就都能解析出来了

二。安卓端的实现

安卓端也是通过socket将json数据发送过来的,建立工程之类的我这里就不说了,大家自己去完成,这里我只说要socket传输json数据的部分。

1.首先你得把第三方gson的Jar包放到android工程里的libs目录下,我用的是gson-2.2.4.jar

2.首先定义如下的待传送的类:

public class login_info implements Serializable

{

public String user_count;

public String

user_passwd;

public int user_id;

public login_info(String

user_count, String user_passwd, int user_id)

{

this.user_count = user_count;

this.user_passwd = user_passwd;

this.user_id = user_id;

}

}

3.然后在socket发送数据时的处理:

s_writer = new BufferedWriter(new

OutputStreamWriter(s_socket.getOutputStream()));

login_info li = new login_info("wangwu","123456",111);

String

str=new Gson().toJson(li);

s_writer.write(str);

s_writer.flush();

好了,利用json传输和解析类信息就完成了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值