首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Mirah反序列化对象列表,用于代码1

用Mirah反序列化对象列表,用于代码1
EN

Stack Overflow用户
提问于 2017-04-20 15:30:13
回答 1查看 84关注 0票数 1

我试图在一个codenameone应用程序中使用mirah到POJO映射。当我想要映射一个简单的JSON (如

{"id":"1","name":"foo","classification":"10"}

在这门课上:

代码语言:javascript
复制
public class Brand {
    private String id; 
    private String name;
    private String classification;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getClassification() {
        return classification;
    }

    public void setClassification(String classification) {
        this.classification = classification;
    }    
}

现在我想把它包装在一个Message对象中,在其中我有一个品牌列表:

代码语言:javascript
复制
import java.util.List;

public class Message { 
    public List<Brand> brands;

    public List<Brand> getBrands() {
        return brands;
    }

    public void setBrands(List<Brand> brands) {
        this.brands = brands;
    }        
}

我使用这个Mirah脚本进行映射:

代码语言:javascript
复制
data_mapper Message:MessageMapper
data_mapper Brand:BrandMapper

就像shannah描述的这里

我调用Webservice的代码:

代码语言:javascript
复制
    MessageMapper scheduleMapper = new MessageMapper();
    DataMapper.createContext(Arrays.asList(
            scheduleMapper,
            new BrandMapper()
        ), new DataMapper.Decorator() {

        public void decorate(DataMapper mapper) {
            mapper.setReadKeyConversions(Arrays.asList(DataMapper.CONVERSION_NONE));
        }
    });



    try {
    Message  message = scheduleMapper.readJSONFromURL("http://localhost/php-REST-DigitaleMusterplatte/api.php/brands", Message.class);
        System.out.println(message);
    } catch (IOException ex) {
        Log.e(ex);
    }

以下是json的回应:

{"brands":[{"id":"1","name":"foo","classification":"10"},{"id":"2","name":"bar","classification":"20"}]}

我明白这一例外:

代码语言:javascript
复制
java.lang.RuntimeException: Failed to get key brands for class interface java.util.List because it was not a registered object type
at ca.weblite.codename1.mapper.DataMapper.get(DataMapper.java:507)
at com.mycompany.app.dmp.models.MessageMapper.readMap(/Volumes/Windows VMS/Documents/Shared/NetBeansProjects/mirah_macro_utils/MirahMacroUtils/src/ca/weblite/mirah/utils/DataMapperBuilder.mirah)
at ca.weblite.codename1.mapper.DataMapper.readMap(DataMapper.java:719)
at ca.weblite.codename1.mapper.DataMapper.readJSON(DataMapper.java:780)
at ca.weblite.codename1.mapper.DataMapper.readJSON(DataMapper.java:792)
at ca.weblite.codename1.mapper.DataMapper.readJSONFromConnection(DataMapper.java:767)
at ca.weblite.codename1.mapper.DataMapper.readJSONFromURL(DataMapper.java:754)
at com.mycompany.myapp.MyApplication.start(MyApplication.java:96)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.codename1.impl.javase.Executor$1$1.run(Executor.java:123)
at com.codename1.ui.Display.processSerialCalls(Display.java:1152)
at com.codename1.ui.Display.mainEDTLoop(Display.java:969)
at com.codename1.ui.RunnableWrapper.run(RunnableWrapper.java:120)
at com.codename1.impl.CodenameOneThread.run(CodenameOneThread.java:176)

演示应用程序OSCONScheduler运行良好。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-20 18:15:16

这看起来像个窃听器。但是尝试将brands改为private而不是public。它可能会混淆是使用访问器/可变还是使用公共变量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43523905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档