在本文中,我们将为您详细介绍fastjson-1.1.63.android增强对Kotlin的支持,提升性能的相关知识,此外,我们还会提供一些关于Androidjson数据解析之Gson和FastJs
在本文中,我们将为您详细介绍fastjson-1.1.63.android 增强对 Kotlin 的支持,提升性能的相关知识,此外,我们还会提供一些关于Android json数据解析之Gson和FastJson、Android Kotlin RXKotlin Room - 错误 Kotlin.unit、android refrofit kotlin 从 api 获取 json 什么都不做、Android Studio 3.0 Canary 1 发布,支持 Kotlin 语言的有用信息。
本文目录一览:- fastjson-1.1.63.android 增强对 Kotlin 的支持,提升性能
- Android json数据解析之Gson和FastJson
- Android Kotlin RXKotlin Room - 错误 Kotlin.unit
- android refrofit kotlin 从 api 获取 json 什么都不做
- Android Studio 3.0 Canary 1 发布,支持 Kotlin 语言
fastjson-1.1.63.android 增强对 Kotlin 的支持,提升性能
fastjson-1.1.63.android已发布,该版本增强了对kotlin的支持,修复了几个Bug,提升Date/int类型的反序列化性能。更新如下:
修复某些场景kotlin支持的bug #1441 #1431
增强对ISO 8601日期格式的支持 #1443
修复特定features组合导致的空指针异常 #1425
提升日期类型的反序列化性能
提升int类型字段值为负数时的parse性能
相关链接
下载 http://repo1.maven.org/maven2/com/alibaba/fastjson/1.1.63.android/
文档 https://github.com/alibaba/fastjson/wiki/%E5%B8%B8%E8%A7%81%E9%97%AE%E9%A2%98
源码 https://github.com/alibaba/fastjson/tree/1.1.63.android
Downloads
Source code (zip)
Source code (tar.gz)
详情请参阅发布说明。
Android json数据解析之Gson和FastJson
Android json数据解析之Gson和FastJson的使用
一:Gson使用
Gson是谷歌提供的一个开源库,可以用来解析JSON数据。
1.什么是json
json就是用来进行网络数据传输的一种格式,目前的使用很广泛,其格式就是一种键值对的形式,很方便进行解析。json有Json对象(JsonObject)和Json数组(JsonArray)两种形式。凡是以{}就是一个Json对象,凡是[]就是一个Json数组。
{//一个Json对象
"user": "user1",
"pwd": "123456"
}
{//这个对象有4个字段,其中一个是数组
"user": "user1",
"pwd": "123456",
"jsonArray": [//一个Json数组里面有2个Json对象,每个Json对象有2个字段
{"user": "user1",
"pwd": "123456"},
{"user": "user2",
"pwd": "123456"}
],
"result": "成功"
}
2.添加Gson依赖
这是github上19.1kStar项目
在app下build.gradle添加依赖
implementation ''com.google.code.gson:gson:2.8.6''
3.使用GsonFormat工具
Gson是采用对象映射的方式,所有要为JSON数据创建一个Java对象来与之对应。
1.安装GsonFormat插件
2.新建一个类,在类里面按Alt+S键,并将要转换的Json数据复制进去
4.Gson使用
public class User implements Serializable {
/**
* user : user1 * pwd : 123456 * jsonArray : [{"user":"user1","pwd":"123456"},{"user":"user2","pwd":"123456"}] * result : 成功
*/
private String user;
private String pwd;
private String result;
private List<JsonArrayBean> jsonArray;
public static class JsonArrayBean implements Serializable {
/**
* user : user1 * pwd : 123456 */
private String user;
private String pwd;
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}
public String getUser() {
return user;
}
public void setUser(String user) {
this.user = user;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getResult() {
return result;
}
public void setResult(String result) {
this.result = result;
}
public List<JsonArrayBean> getJsonArray() {
return jsonArray;
}
public void setJsonArray(List<JsonArrayBean> jsonArray) {
this.jsonArray = jsonArray;
}
}
解析JSON对象
String jsonData="要解析的Json字符串";
Gson gson=new Gson();
User user=gson.fromJson(jsonData, User.class);
String result=user.getResult();
Log.d("aa",result);
===========
aa: 成功
解析Json对象里面的数组
// 因为jsonArray字段对应的是一个JSON数组,所以要用一个List来对应
List<User.JsonArrayBean> jsonArrayBeans=user.getJsonArray();
//取值
for (int i=0;i<jsonArrayBeans.size();i++){
User.JsonArrayBean jsonArrayBean=jsonArrayBeans.get(i);
String u=jsonArrayBean.getUser();
Log.d("bb",u);
================
取到的值
bb: user1
bb: user2
解析纯数组
[
{"user": "user8",
"pwd": "123456"},
{"user": "user9",
"pwd": "123456"}
]
//使用方式
Gson gson=new Gson();
List<Data> datas=gson.fromJson(jsonData, new TypeToken<ArrayList<Data>>(){}.getType());
for (int i=0;i<datas.size();i++){
Data data=datas.get(i);
String u=data.getUser();
Log.d("cc",u);
}
//打印结果
cc: user8
cc: user9
序列化对象成Json(Teacher对象下4个属性 age,email,isDeveloper,name)
Gson gson=new Gson();
Teacher teacher=new Teacher("Rocky","111@qq.com",22,true);
String teacherJson=gson.toJson(teacher);
Log.d("bb",teacherJson);
打印结果
bb {"age":22,"email":"111@qq.com","isDeveloper":true,"name":"Rocky"}
如果变量为空值的话序列化和反序列化
1.可见某个变量为null时,Gson在序列化的时候直接把这个变量忽略了
2.对于JSON字符串里没有的变量,Gson在反序列化时会给它一个默认值,int类型默认为0,bool类型默认为false,String类型默认为null
Gson gson=new Gson();
Teacher teacher=new Teacher("Rocky",null,22,true);
String teacherJson=gson.toJson(teacher);
Log.d("bb",teacherJson);
控制序列化/反序列化的变量名称
以Teacher对象为例,假如JSON字符串的变量名name变成fullName,无需紧张,我们也不用把Teacher对象的变量name改成fullName,然后把get,set方法全改了。只需要用Gson提供的注解@SerializedName就行。
public class Teacher{
@SerializedName("fullName")
//@SerializedName(value = "name", alternate = "fullName")
//然而现实远比想象中复杂,这个JSON有时候传的是`fullName`,有时候传的是`name`,这时该怎么办呢? 不用担心,`@SerializedName` 接受两个参数,`value` 和 `alternate` ,顾名思义,`alternate` 是备选变量名
private String name;
private String email;
private int age;
private boolean isDeveloper;
}
打印Json结果
{"age":22,"isDeveloper":true,"fullName":"Rocky"}
序列化/反序列化过程中忽略某些变量
public class Teacher {
@SerializedName("fullName")
private String name;
private String email;
//@Expose()参与序列化和反序列化
//@Expose(serialize = false)不参与序列化,只参与反序列化
// @Expose(deserialize = false)只参与序列化,不参与反序列化
@Expose(serialize = false,deserialize = false)//序列化和反序列化都不参与
private int age;
private boolean isDeveloper;
}
然而:要使用这个注解来控制序列化和反序列化,就不能使用默认的Gson对象
//Gson gson=new Gson();不能通过这种方式构建Gson对象
GsonBuilder builder=new GsonBuilder();
builder.excludeFieldsWithoutExposeAnnotation();
//builder.setPrettyPrinting();
Gson gson=builder.create();
Teacher teacher=new Teacher("Rocky","11@qq.com",22,true);
String teacherJson=gson.toJson(teacher);
Log.d("bb",teacherJson);
打印结果
bb: {} 我不知道为什么这种方式出现的结果是空,按理说我只是限定一个属性的序列化方式按照网上说的方式构建的Gson也不能
我把builder.excludeFieldsWithoutExposeAnnotation();换成builder.setPrettyPrinting();可以打印出来
但是没有限制字段的序列化和反序列化
方式二:transient字段
通过private transient int age;
Gson gson=new Gson();
Teacher teacher=new Teacher("Rocky","11@qq.com",22,true);
String teacherJson=gson.toJson(teacher);
Log.d("bb",teacherJson);
打印结果
{"email":"11@qq.com","isDeveloper":true,"fullName":"Rocky"}
二:FastJson使用
FastJson是一个Java语言的编写的高性能的Json处理器,由阿里巴巴公司开发的,github上23kStar
1.添加依赖
implementation ''com.alibaba:fastjson:1.2.73''
2.序列化Json,把对象转成Json串调用JSON.toJSONString
tudent student=new Student("Mike",12);
String studentJson =JSON.toJSONString(student,true);//为true就是要格式化Json,flase就是非格式化Json
//Gson的builder.setPrettyPrinting();格式化Json
Log.d("aa",studentJson);
打印结果:
aa: {
"age":12,
"name":"Mike"
}
3.反序列化Json,把Json串转成对象JSON.parseObject
String json = "{"age":18, "name":"Rocky"}";
Student student=JSON.parseObject(json,Student.class);//要记得Student 添加一个无参的构造方法
Log.d("bb",student.getName());
Log.d("bb",student.getAge()+"");
打印结果
bb: Rocky
bb: 18
如果没有无参的构造方法会报错误
Json转成复杂的Bean,如List ,Set,Map
public class Student {
private String name;
private int age;
....忽略get,set方法
}
一:List方式
String json = "[{"age":18, "name":"Rocky"},{"age":19, "name":"jack"}]";
List<Student> lists=JSON.parseObject(json,new TypeReference<ArrayList<Student>>(){});
for (int i=0;i<lists.size();i++){
Student student=lists.get(i);
Log.d("cc",student.getName());
Log.d("cc",student.getAge()+"");
}
二:Set方式
String json = "[{"age":18, "name":"Rocky"},{"age":19, "name":"jack"}]";
Set<Student> lists=JSON.parseObject(json,new TypeReference<HashSet<Student>>(){});
for (Student student:lists){
Log.d("cc",student.getName());
Log.d("cc",student.getAge()+"");
}
打印结果
cc: Rocky
cc: 18
cc: jack
cc: 19
@JSONField注解的使用
1.作用于get方法上:当把注解作用于get方法上的时候,在把Java对象转化成Json字符串的时候,Java对象中的字段名会转化为注解中的name指定的字段名。
@JSONField(name = "myAge")
public int getAge() {
return age;
}
Student student=new Student();
student.setAge(15);
student.setName("Rock");
String studentJson =JSON.toJSONString(student,true);
Log.d("aa",studentJson);
打印结果
aa: {
"myAge":15,//变成我们注释的属性名
"name":"Rock"
}
2 作用于set方法上:在把json字符串转化成java对象的时候,注解中的name指定的字段名会映射为Java对象中的字段名。
@JSONField(name = "myName")
public void setName(String name) {
this.name = name;
}
String json = "{"age":2,"myName":"ss"}";//这个Json串的属性换成标记的
Student student= JSON.parseObject(json,Student.class);
Log.d("cc",student.getName());
Log.d("cc",student.getAge()+"");
打印结果
cc: ss
cc: 2
3 @JSONField作用于java类的字段上
public class Student {
@JSONField(name = "name", alternateNames = {"myName", "meName"})
private String name;
private int age;
}
String json = "{"age":2,"meName":"ss"}";//这个name字段可以是myName,也可以是meName都可以映射到name字段上
Student student= JSON.parseObject(json,Student.class);
Log.d("cc",student.getName());
Log.d("cc",student.getAge()+"");
打印结果
cc: ss
cc: 2
Java Bean对象与JSONObject 对象相互转换
Java Bean对象--->JSONObject对象--->json字符串
student.setAge(15);
student.setName("Rock");
JSONObject jsonObject= (JSONObject) JSON.toJSON(student);//JSONObject对象
String studentJson= jsonObject.toJSONString();//转成Json字符串,toString()也可以
Log.d("aa",studentJson);
json字符串与JSONObject对象转换
json字符串--->JSONObject对象
String json = "{"age":2,"meName":"ss"}";
JSONObject studentObject= JSON.parseObject(json);
json字符串转成Java集合可以直接使用JSON.parseArray()
String json = "[{"age":18, "name":"Rocky"},{"age":19, "name":"jack"}]";
List<Student> lists=JSON.parseArray(json,Student.class);
for (Student student:lists){
Log.d("cc",student.getName());
Log.d("cc",student.getAge()+"");
}
END:所求皆吾愿,所行化坦途
Android Kotlin RXKotlin Room - 错误 Kotlin.unit
如何解决Android Kotlin RXKotlin Room - 错误 Kotlin.unit?
我想通过循环数组向房间数据库做一个简单的插入数据。 我使用 RXKotlin 来迭代数组 我有一个这样的数组:
fun defaultDataCategory() : ArrayList<CategoryModel>{
var cat: CategoryModel
var catArrayList: ArrayList<CategoryModel> = ArrayList(0)
val date: Int = Calendar.DATE
val formatedDate = SimpleDateFormat("yyyy-MM-dd").format(Date())
val formatedTime = SimpleDateFormat("HH:mm").format(Date())
val DateTime = "$formatedDate $formatedTime"
catArrayList.add(
CategoryModel(
1,"Personal",true,"Red",Converter.toDate(Calendar.getInstance().timeInMillis),"system","system"
)
)
catArrayList.add(
CategoryModel(
2,"Work","Blue","system"
)
)
catArrayList.add(
CategoryModel(
3,"Home","Purple","system"
)
)
catArrayList.add(
CategoryModel(
4,"Learn","Yellow","system"
)
)
return catArrayList
}
我像这样用 RXKotlin 循环了一个数组
var catArrayList: ArrayList<CategoryModel> = DefaultData.defaultDataCategory()
catArrayList.toObservable()
.subscribeBy( // named arguments for lambda Subscribers
onNext = { homeviewmodel.insertCategory(it) },onError = { Log.e("error insert=",it.printstacktrace().toString()) },onComplete = { Log.e("complete insert=","complete insert") }
)
我得到了一个错误“kotlin.unit”。
Error RXKotlin
如何使用 RXKotlin 迭代数组并插入房间数据库?
解决方法
试试
Observable.fromIterable(catArrayList).subscribeBy {...}
android refrofit kotlin 从 api 获取 json 什么都不做
如何解决android refrofit kotlin 从 api 获取 json 什么都不做?
我有 REST API 之类的底部和 kotlin 应用程序,但我无法从中获取数据,也什么都不做。
我使用了 JSON 可能是这个原因?我尝试了大部分事情,但什么也没做。
当我删除名称 flyList
我可以得到它,但我不必删除该名称。
请帮忙。
JSON:
{
"flyList":[
{
"pgt_id":1198952,"dmlsts":"U","newparkpos":"1","preparkpos":"3","rkgelcag":"PGT82N","rkgelpltar":"2021-07-31 00:00:00.0","rkgelplsaat":"16:55:00","rkgidcag":"PGT2260","rkgidpltar":"2021-07-31 00:00:00.0","rkgidplsaat":"18:00:00","send":1,"delFly":0
},{
"pgt_id":1198826,"newparkpos":"204B","preparkpos":"201A","rkgelcag":"PGT14J","rkgelplsaat":"14:30:00","rkgidcag":"PGT59K","rkgidplsaat":"17:35:00","delFly":0
}
]
}
代码:
private fun loadData(){
val retrofit=Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create())
.build()
val service =retrofit.create(FlightAPI::class.java)
val call=service.getData()
call.enqueue(object : Callback<Flightmodel> {
override fun onResponse(call: Call<Flightmodel>,response: Response<Flightmodel>) {
if (response != null && response.isSuccessful && response.body() != null) {
var data=response.body();
}
}
override fun onFailure(call: Call<Flightmodel>,t: Throwable) {
Todo("Not yet implemented")
}
})
}
}
我将数据类航班列表和航班......
data class Flightmodel(
val flyList: List<Fly>
)
data class Fly(
val delFly: Int,val dmlsts: String,val newparkpos: String,val pgt_id: Int,val preparkpos: Any,val rkgelcag: String,val rkgelplsaat: String,val rkgelpltar: String,val rkgidcag: String,val rkgidplsaat: String,val rkgidpltar: String,val send: Int
)
解决方法
api 接口之类的
接口 FlightAPI {
fun getData():Call<FlightModel>
}
,
我解决了这个问题
call.enqueue(object : Callback<FlightModel>{
override fun onResponse(call: Call<FlightModel>,response: Response<FlightModel>) {
var flightModel =response?.body()
flightModels = flightModel?.flyList as ArrayList<Fly>?
for (fly : Fly in flightModels!!){
println("Gel_Ad.........:"+fly.rkgelcag)
}
}
Android Studio 3.0 Canary 1 发布,支持 Kotlin 语言
Android Studio 3.0 Canary 1 发布了。官方表示,这些一直在默默迭代中的功能本应是 Android Studio 2.4 Canaries 的一部分,但今天他们意识到这个版本添加了许多重要的功能,因此将版本改成了 Android Studio 3.0。Android Studio 3.0 Canary 1 三个主要的新特性:
一套新的应用程序性能分析工具,用于快速诊断性能问题
支持 Kotlin 编程语言
提升大型 app 项目的 Gradle 构建速度
Android Studio 3.0 还与 Android 平台开发紧密集成,具有以下其他主要功能:
支持即时应用(Instant App)开发
在 Android O 模拟器系统映像中引入 Google Play 商店
新的 Android O 开发向导
据官方表示,Android Studio 3.0 的首个 canary 版本具有 20+ 的新功能。
官方还表示如果希望开发基于 Android O 的应用、创建一个即时应用,使用 Kotlin 语言进行开发或者使用最新的 Android app 性能工具来提升 app 质量,建议下载 Android Studio 3.0 Canary 1 进行使用。
下面再介绍一些 Android Studio 3.0 Canary 1 的主要新特性:
开发
支持 Kotlin 语言:通过对 Kotlin 语言的支持,可以为你的 Android App 无缝添加 Kotlin 代码。可以选择使用 “Code → Convert Java File to Kotlin File”(将 Java 文件转换为 Kotlin 文件)内置转换工具将 Kotlin 添加到项目中;或选择使用 “New Project Wizard(新建项目向导)” 创建 Kotlin 项目。了解更多在 Android 和 Android Studio 中对 Kotlin 的支持。
将 Java 文件转换为 Kotlin 文件
Java 8 Language:
更新 Java 8 的 Project Structure Dialogue
改进布局编辑器
自适应图标向导
XML 字体和可下载的字体
XML 字体预览
可下载的字体资源选择器
Android Things
Intellij 平台升级至 2017.1
构建
支持构建即时应用( Instant App)
改进构建速度
Google 的 Maven 仓库变更
测试和调试
Emulator Google Play System Images
Emulator OpenGL ES 3.0 的支持
模拟器代理的支持
App Bug Reporter
Android Wear Rotatory
APK Debugging
Layout Inspector
Device File Explorer
优化
CPU Profiler
Memory Profiler
Network Profiler
APK Analyzer 的改进:现在可以分析 Instant App zip 文件和 AARs,并查看类和方法的 dex 字节码。还可以生成 Proguard 配置规则,并在 dex 查看器中加载 Proguard 映射文件。
查看发布说明了解更多细节。
详情请参阅发布主页
下载地址(注意:该版本为预览版!)
>>>【全民狂欢,评论有礼】5 月 15 日 - 31 日评论每日更新的 “新闻资讯和软件更新资讯”,评论点赞数超过 20 的可登上每周更新的 “源资讯” 和 “软件周刊” 两大栏目,点赞数超过 50 的还将获得 5 活跃积分奖励和开源中国定制好礼。详情
今天关于fastjson-1.1.63.android 增强对 Kotlin 的支持,提升性能的分享就到这里,希望大家有所收获,若想了解更多关于Android json数据解析之Gson和FastJson、Android Kotlin RXKotlin Room - 错误 Kotlin.unit、android refrofit kotlin 从 api 获取 json 什么都不做、Android Studio 3.0 Canary 1 发布,支持 Kotlin 语言等相关知识,可以在本站进行查询。
本文标签: