Android Studio安卓开发中使用json来作为网络数据传输格式
如果你是在安卓开发中并且使用android studio,要使用json来作为数据传输的格式,那么下面是我的一些经验。
一开始我在android studio中导入那6个包,那6个包找了非常久,因为放在android studio项目的lib目录下之后,不是编译错就是运行错。
编译错通常是这两种情况:
1.代码那里爆红,说明你导入包都还没有成功
2.1解决了,但是和andorid studio自带的json包冲突,也就是类或者函数什么的重复,也就是duplicate class。
解决2的时候,我的错误做法
我按照编译的那个错误日志删除6个包中的那些重复包,直到编译通过,但是却又发生了运行错,又说类找不到(真晕,前面说重复,删了,又说类找不到)class not found。
解决2的办法
删除那6个包,下载比较新版本的那6个包,并导入,就不会冲突。
下面提供两种方法得到较新版本的6个包:
方法一,下面是我上传的,只需要很少积分,1个就可以了。
json6个包下载地址
方法二,由于json的那6个包还算主流,可以在andorid studio中直接下载,很方便。操作如下:


在这里你可以简略搜索,输入关键词的就可以了,如下图

然后依次下载那6个包的新版之后,在这里下载操作的好处就是android studio会自动帮你导入,你只管在代码中使用就行了。一般下载的时候选择的版本选择第一个就行了,比如上面排在最前面的2.4.其他的也类似,选择第一个,再比如:

解决了2之后
运行还是错。但是错误不一样了,说classdefnotfound。
说了这么多,现在才是正文,上面只是踩的坑,烦死了。正文开始:
解决方法:
1.删除你那6个包
2.在android studio中下载gson包,怎么下载,上面的图片已经说过了,这里只贴一个图片。

然后使用gson来完成json数据格式的解析,那么由于不是json的那6个包,那么自然和json6个包进行数据格式解析的方法不同。
比如json6个包中的是fromObject(String jsonstring)方法。
JSONObject jsonObject=JSONObject.fromObject(String jsonstring);
但是gson不一样,其简单使用方法如下:
下面使用类作为数据载体,用gson把一个javabean类转换成json数据,然后传输。
//这个是一个类Javabean,下面代码有这个类是什么。
DiscoverAllTables discoverAllTables = new DiscoverAllTables();
discoverAllTables.setAuthor(author);
discoverAllTables.setComment(comment);
discoverAllTables.setContent(content);
discoverAllTables.setMark(mark);
discoverAllTables.setTitle(title);
discoverAllTables.setTablename(tablename);
//Gson派上用场。
Gson gson = new Gson();
//下面化成json格式数据.
String jsonstring = gson.toJson(discoverAllTables);
下面是那个类。
public class DiscoverAllTables {
private int id;
String author,title,mark,content,comment,tablename;
public String getTablename() {
return tablename;
}
public void setTablename(String tablename) {
this.tablename = tablename;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getMark() {
return mark;
}
public void setMark(String mark) {
this.mark = mark;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
假设另外一个端收到了这个jsonstring,如何反向解析呢?
这里也只介绍Gson的使用方法,而不是用那6个包的使用方法。
//由json格式的数据jsonstring对应上面的反向解析成类。
JSONObject jsonObject = new JSONObject(jsonstring);
Gson gson = new Gson();
DiscoverAllTables discoverAllTables=gson.fromJson(jsonObject.toString(),DiscoverAllTables.class);
//有了这个对象,你就可以访问数据了,比如:
String xxx=discoverAllTables.getXXX();
此外还有一个你经常用到的,就是jsonstring是一个数组类型转化而来的,比如说是一堆名字,也就是字符串数组,我们一般使用ArrayList而不是String[]。
下面是正向:
List<String> list=new Arraylist<String>();
list.add("bob");
list.add("mike");
Gson gson = new Gson();
String jsonstring = gson.toJson(list);
下面是逆向解析
JSONArray jsonArray = new JSONArray(jsonstring);
Gson gson = new Gson();
List<String> list=new Arraylist<String>();
list = gson.fromJson(jsonArray.toString(), new TypeToken<ArrayList<String>>() {
}.getType());
//然后你就可以操作list了。
上面就是常见的两种利用Gson解析和生成json数据的方式,一个是数组(反向接收的时候用JSONArray,如上代码),一个是类(反向接收的时候JSONObject,如上上上代码)。如果对格式要求不高,比如数据格式没有什么复杂嵌套的话,基本上能解决你的问题了。
总结,我android studio用Gson包,不用那6个包,而Gson主要用好toJson(),fromJson()两个方法就可以。服务器端开发可以用那6个包,至于是不是最新版的包都没有问题,都不会有冲突什么的错误,可以正常使用。
如有错误,欢迎交流。
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)