标签: flexjson

Android 4.4.4上的FlexJson ClassNotFound异常

我有一个针对Android设备的multidex项目.我使用Flexjson.我已经用flexjson 3.3和2.x进行了测试.

它与Android 5.x完美配合,但在Android 4.4.4中崩溃.

看起来Dex支持库与旧的Android版本不合适但我无法分辨.

这是我的堆栈跟踪:

 06-29 03:50:44.763  11884-11884/com.pigdroid.gameboard E/AndroidRuntime? FATAL EXCEPTION: main
    Process: com.pigdroid.gameboard, PID: 11884
    flexjson.JSONException: [ layers.values ]:  Could not load com.pigdroid.game.board.tile.model.IntTileLayer
            at flexjson.ObjectBinder.findClassInMap(ObjectBinder.java:250)
            at flexjson.ObjectBinder.findClassName(ObjectBinder.java:213)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:92)
            at flexjson.ObjectBinder.bindIntoCollection(ObjectBinder.java:110)
            at flexjson.factories.ListObjectFactory.instantiate(ListObjectFactory.java:13)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:95)
            at flexjson.ObjectBinder.bindIntoObject(ObjectBinder.java:149)
            at flexjson.factories.ExistingObjectFactory.instantiate(ExistingObjectFactory.java:25)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:95)
            at flexjson.ObjectBinder.bind(ObjectBinder.java:74)
            at flexjson.JSONDeserializer.deserialize(JSONDeserializer.java:241)
            at flexjson.JSONDeserializer.deserializeInto(JSONDeserializer.java:301)
            at com.pigdroid.game.model.memento.UndoableObject.from(UndoableObject.java:35)
            at com.pigdroid.game.controller.GameController.loadModelFromSerialized(GameController.java:108)
            at com.pigdroid.gameboard.view.detail.game.tile.TileBoardGameFragmentController.setGame(TileBoardGameFragmentController.java:692)
            at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.onKickOff(GameDetailFragment.java:168)
            at com.pigdroid.gameboard.view.ServiceFragment.kickOffIf(ServiceFragment.java:71)
            at com.pigdroid.gameboard.view.detail.game.GameDetailFragment.kickOffIf(GameDetailFragment.java:159)
            at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:52)
            at com.pigdroid.gameboard.view.ServiceFragment$3.bound(ServiceFragment.java:48)
            at com.pigdroid.android.hateaidl.HateAIDLConnection$3.onServiceConnected(HateAIDLConnection.java:118)
            at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1101)
            at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1118)
            at android.os.Handler.handleCallback(Handler.java:733)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:136)
            at android.app.ActivityThread.main(ActivityThread.java:5001) …
Run Code Online (Sandbox Code Playgroud)

android json deserialization flexjson android-multidex

9
推荐指数
1
解决办法
478
查看次数

FlexJSON不会完全序列化类对象

我是FlexJson的新手,并且正在关注http://flexjson.sourceforge.net/以获得简单的教程.
我写了一个简单的程序,但似乎没有序列化对象属性.如果有人知道,请帮助我

package com.webapp.enter;

import flexjson.JSONSerializer;

class PObject {

       String name;
       int age;
       String country;

        public PObject (String n, int a , String c){
            this.name = n;
            this.country = c;
            this.age = a;
        }

        public String toString(){
            return this.name + this.age + this.country;
        }

        public String[] getData(){
            return new String[]{ this.name, this.country};
        }
}

public class Person{

    public static void main(String main[]){
        PObject person = new PObject("harit",23,"india");
        System.out.println(person.name +  " - " + person.age + " - " …
Run Code Online (Sandbox Code Playgroud)

java json flexjson

8
推荐指数
1
解决办法
8152
查看次数

如何在使用Flexjson时排除空值字段?

我使用Flexjson将这样的类序列化为JSON:

public class Item {
    private Long id;
    private String name;
    private String description;
    ...

    // Getters and setters
    ...
}
Run Code Online (Sandbox Code Playgroud)

许多Item字段可以为null(例如,描述).因此,当使用Flexjson序列化这样的Item对象时,我得到以下JSON:

 {"id":62,"name":"Item A","description":null,...}
Run Code Online (Sandbox Code Playgroud)

因为,正如我已经提到的,Item对象可能包含许多空值字段,因此输出的JSON比实际需要的长.到目前为止这是一个问题,因为我想通过WiFi,3G,EDGE或GPRS通过无线连接将生成的JSON从Web服务器发送到移动客户端(即,需要更多带宽,这会导致速度降低).

因此,我想问一下如何使用Flexjson(有效地)排除空值属性?

谢谢!

java json jsonserializer flexjson

6
推荐指数
1
解决办法
4343
查看次数

使用Java/Android中的Flexjson将JSONObject映射到List

我目前正在尝试使用Flexjson反序列化JSON字符串并将其映射到我的Android应用程序的Object模型.该应用程序是一种具有多个供应商的库,其中可以包含一些目录,其中包含更多目录和文档.json是从我没有影响的Web服务中获取的,看起来像这样:

{
    "library":{
        "vendor":[
            {
                "id":146,
                "title":"Vendor1",
                "catalog":[
                     {
                        "id":847,
                        "document":[
                            {
                                "id":1628,
                                "title":"Document",
                ...
                            },
                            {
                ...
                            }
                        ],
                        "title":"Catalog ",
                    },
                {
                ...
                }
              ]
            },
            {
            ...
            }
        ]
    }
}
Run Code Online (Sandbox Code Playgroud)

因此,每个供应商,目录,文档都由JSONObject表示,所有子目录和文档都在JSONArray中.到目前为止,一切都适用于Flexjson和以下反序列化代码:

LibraryResponse response = new JSONDeserializer<LibraryResponse>()
                    .use(Timestamp.class, new TimestampObjectFactory())
                    .deserialize(getLocalLibrary(), LibraryResponse.class);
return response.library;
Run Code Online (Sandbox Code Playgroud)

我有一个库对象有一个List<Vendor>.每个供应商都有一个List<Catalog>和一个List<Document>.

但遗憾的是,如果目录只包含单个文档或目录只包含一个目录,那么Web服务会将JSONArrays绑定到简单的JSONObjects.所以在这种情况下json看起来像这样:

"document":
    {
        "id":1628, 
        "title":"Document",
        ...
    }
Run Code Online (Sandbox Code Playgroud)

现在Flexjson不知道如何反序列化,最终我得到了一个库List<HashMap>而不是一个库.vendorX.getDocument()List<Document>.一个想法是明确告诉Flexjson如何处理这种情况,但我不知道从哪里开始.另一种方法是手动解析初始json并用适当的JSONArray替换这些JSONObject.但我觉得这样做并不是很好,因为图书馆可以很深.

我希望你能在这里提供一些指导.

java android json deserialization flexjson

5
推荐指数
1
解决办法
1046
查看次数

FlexJson-无法序列化Double []数组

我有一个带有Double []变量的简单用户类,用于指定用户的位置。

@Document
public class User {
    private long id;
    private Double[] location;
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试序列化我的User对象的代码

new JSONSerializer()
           .transform(new ArrayTransformer(), Double[].class)
           .serialize(object));
Run Code Online (Sandbox Code Playgroud)

但是location字段不会被序列化,但是其他字段也会被序列化..有人可以帮忙吗?

谢谢!

java arrays json serializer flexjson

5
推荐指数
1
解决办法
99
查看次数

Flexjson和Dexguard / Proguard

关于flexjson库,我在使用dexguard时遇到问题。尝试使用JSONDeserializer反序列化时,我不断收到以下错误。

 **09-15 20:46:10.271 10901-11552/** **A/art: sart/runtime/class_linker.cc:3430] Check failed: klass->IsProxyClass()** 
Run Code Online (Sandbox Code Playgroud)

在Android发布apks中进行混淆后,是否有人有适当的规则让flexjson正常工作?

与gson lib类似。

android proguard flexjson dexguard

5
推荐指数
1
解决办法
386
查看次数

使用Flexjson更改属性名称

我使用FlexJson进行序列化,唯一的问题是它生成字段名称小写,而我需要它们以大写字母开头:

class Person
{
     String name;
     public String getName() { return name;}
}
Run Code Online (Sandbox Code Playgroud)

序列化时,字段被序列化为name,而我需要它Name.

如何指定输出字段名称?我可以使用一些属性来指定所需的序列化名称吗?

java serialization flexjson

3
推荐指数
1
解决办法
2731
查看次数

FlexJson和@JSON注释 - @JSON(name ="")不起作用

我刚刚切换到FlexJson,我已经遇到了问题.

http://flexjson.sourceforge.net/上的文档章节Controlling JSON naming with @JSON说明:

对象序列化时,JSON对象上的属性名称由Java属性的名称确定.这意味着使用了getter方法的名称或字段名称.但是,有时JSON输出与Java对象使用的名称不匹配.您可以使用@JSON注释来控制它.例如:

    public class Species {
        @JSON(jsonName = "genus")
        private String type;

        private String name;

        @JSON(jsonName="species")
        public String getName() {
           return name;
        }
    }
Run Code Online (Sandbox Code Playgroud)

除了它不起作用.然后他们说:

定义@JSON.jsonName用于序列化和反序列化.

现在,当我查看http://flexjson.sourceforge.net/javadoc/index.html上的javadoc时,我可以看到有4个可选元素属于@JSON注释,这些是

包含名称objectFactory转换器

没有jsonName,就像在例子中一样.

那么我如何让这个注释工作,所以我可以有不同的java和json名称?如何定义此注释元素或使用预定义的元素name

为了澄清,我可以注释@JSON和自动完成推荐@JSON(include),但后来include无法解决...

我正在使用FlexJson 2.1,我导入了flexjson.JSON;

顺便说一下,我知道这个答案/sf/answers/621573151/,但这不是我想要的.我想使用注释.

java annotations flexjson

3
推荐指数
1
解决办法
1606
查看次数

Android 数组与 Gson 的 Sharedpreferences

我需要创建一个包含最近 5 个通话日期的数组。

我知道我必须将日期保存在数组中,但我不知道如何重新排序其他记录以将最后一次调用日期保留为第一个记录。并且始终只维护5条记录

目标是保存最后一个调用字符串并添加到数组中,之后我重新排序并仅维护 5 条记录,之后我使用 FlexJson 制作一个字符串并保存在共享首选项上。谁有这个完整的流程吗?

这是我正在做的事情,但到处都抛出错误:

节省

SimpleDateFormat df = new SimpleDateFormat("HH:mm:ss dd-MM-yyyy", Locale.getDefault());
Calendar calendar = Calendar.getInstance();
String currentDateTimeString = df.format(calendar.getTime());

List<String> textList = new ArrayList<>();
JSONSerializer ser = new JSONSerializer();
textList.add(currentDateTimeString);

String jsonText = ser.deepSerialize(textList);

editor.putString("lastCall", jsonText);
editor.commit();
Run Code Online (Sandbox Code Playgroud)

读:

String lastCall = callLogPreferences.getString("lastCall", null);
JSONDeserializer<List<String>> der = new JSONDeserializer<>();
List<String> textList = der.deserialize(lastCall);
Run Code Online (Sandbox Code Playgroud)

我正在使用 FlexJson:GSON 和 InstanceCreator 问题

它没有从字符串转换为数组列表

java arrays android sharedpreferences flexjson

2
推荐指数
1
解决办法
2612
查看次数

如何使用Flexjson JSONDeserializer?

我有一个字符串:

 [{"product_id":"2","name":'stack"'},{"product_id":"2","name":"overflow"}]"
Run Code Online (Sandbox Code Playgroud)

如何使用Flexjson的JSONDeserializer product_id从上面的字符串中获取所有s?

我有一个叫做和的productinformation字段的类.product_idname

java json deserialization flexjson

1
推荐指数
1
解决办法
7886
查看次数

在Play Framework视图中使用JSON的示例

我试图在控制器中进行切换,将JPA检索到的项目作为List发送到模板引擎,现在将它们作为JSON发送.

我更喜欢使用flexJSON库来完成任务.

我有一个应用程序控制器与方法:

public static Result index() {

        ... Processing ...

    flash("success", "Items have been processed");
    return ok(index.render(Item.all()));
}
Run Code Online (Sandbox Code Playgroud)

和一个视图index.scala.html喜欢这个:

@(items: List[Item])

@import helper._

@main("Item list") {

    <h1>@items.size() items(s)</h1>

    <ul>
        @for(item <- items) {
            <li>
                @item.title                
            </li>
        }
    </ul>
}
Run Code Online (Sandbox Code Playgroud)

这些可以完美地显示所有已处理项目的未编号列表.

现在,如果我将控制器更改为使用flexJSON,如下所示:

public static Result getItems() {
        List<Item> items = Item.all();

        String s = new JSONSerializer().exclude("*.class", "description").serialize(items);

        flash("success", "Messages have been processed");
        return ok(index.render(s));
    }
Run Code Online (Sandbox Code Playgroud)

我如何编程我的模板以消耗json字符串项?我试图在这个问题上关注这个博客,http://www.jamesward.com/2011/12/11/tutorial-play-framework-jpa-json-jquery-heroku,但是如何消费json in我的模板视图......任何代码示例都将非常感激.

json playframework playframework-2.0 flexjson

1
推荐指数
1
解决办法
4701
查看次数