【问题标题】:JSON response in a listViewlistView 中的 JSON 响应
【发布时间】:2014-06-16 09:25:05
【问题描述】:

我正在学习 secha touch,我想创建一个页面,在用户输入登录凭据后将收到 JSON 响应,如下所示

  {"items":[{"id":"78e221c8-bbc1-4754-8471-48c863886869","createTime":"2014-05-22T14:57:39.039Z","createUser":"Jon","status":"SAVED","changeTime":"2014-05-22T14:57:39.039Z","changeUser":"Jon","projectId":"63886869-bbc1-4754-8471-48c878e221c8","reportVersionNumber":"1","reportVersionName":"First Version","reportName":"FooBarBaz","reportHash":"qiyh4XPJGsOZ2MEAyLkfWqeQ"}],"totalItems":1

}

目前我已经创建了一个页面,我在其中使用了一个 listItem 并从简单数组中显示其中的项目,其中数据已被硬编码 并使用 itemTPL 获取它 像这样<div class="arHeadline">{projectId}

我现在的店铺是

 data: [
                {
                    Headline: 'Panel',
                    Author: 'Sencha',
                    Content: 'Panels are most useful as Overlays - containers that float over your appl..'
            }

但我想从 json 中获取数据,所以我创建了一个 JSON 存储

Ext.define('MobileChecklist.store.MyJsonPStore', {
    extend: 'Ext.data.Store',

    requires: [
        'MobileChecklist.model.MyModel',
        'Ext.data.proxy.JsonP',
        'Ext.data.reader.Json',
        'Ext.data.Field'
    ],

    config: {
        autoLoad: true,
        data: [
            {
                items: [
                    {
                        id: '78e221c8-bbc1-4754-8471-48c863886869',
                        createTime: '2014-05-22T14:57:39.039Z',
                        createUser: 'Jon',
                        status: 'SAVED',
                        changeTime: '2014-05-22T14:57:39.039Z',
                        changeUser: 'Jon',
                        projectId: '63886869-bbc1-4754-8471-48c878e221c8',
                        reportVersionNumber: '1',
                        reportVersionName: 'First Version',
                        reportName: 'FooBarBaz',
                        reportHash: 'qiyh4XPJGsOZ2MEAyLkfWqeQ'
                    }
                ],
                totalItems: 1
            }
        ],
        model: 'MobileChecklist.model.MyModel',
        storeId: 'MyJsonPStore',
        proxy: {
            type: 'jsonp',
            url: 'data/getPort.json',
            reader: {
                type: 'json',
                idProperty: 'id',
                rootProperty: 'items',
                totalProperty: 'totalItems',
                record: 'items'
            }
        },
        fields: [
            {
                name: 'reportName'
            },
            {
                name: 'projectId'
            }
        ]
    }
});

我的模型是

Ext.define('MobileChecklist.model.MyModel', {
    extend: 'Ext.data.Model',

    requires: [
        'Ext.data.Field'
    ],

    config: {
        fields: [
            {
                mapping: 'items.reportName',
                name: 'reportName',
                type: 'string'
            },
            {
                mapping: 'items.projectId',
                name: 'projectId',
                type: 'string'
            }
        ]
    }
});

我想解码 json 响应并将其显示在 ListItem 中,就像我对字符串数组所做的那样 我该怎么做请帮忙

编辑: 如果我从我的 json 响应中删除项目并使其像一个数组而不是对象,它可以工作并在列表视图中显示它

[{"id":"78e221c8-bbc1-4754-8471-48c863886869","createTime":"2014-05-22T14:57:39.039Z","createUser":"Jon","status":"SAVED","changeTime":"2014-05-22T14:57:39.039Z","changeUser":"Jon","projectId":"63886869-bbc1-4754-8471-48c878e221c8","reportVersionNumber":"1","reportVersionName":"First Version","reportName":"FooBarBaz","reportHash":"qiyh4XPJGsOZ2MEAyLkfWqeQ"}],"totalItems":1}]

【问题讨论】:

  • 在您的商店中设置 data.items,您的问题将得到解决,您也不必在模型中映射数据。
  • 我应该如何设置 data.items?映射或网址或其他什么?我设置这两个都没有帮助我@SujataChanda
  • @SujataChanda 请查看编辑,如果您有任何帮助,请帮助我,谢谢
  • 那么你的问题就解决了。除此之外你还想要什么?
  • 我的问题没有解决我不想修改我的 JSON 响应如果我改变它我得到响应所以问题是它没有被映射

标签: android json sencha-touch listitem


【解决方案1】:

在控制器中使用data.items 设置存储数据,如下所示:-

       Ext.Ajax.request({
            url: someurl,
            params: {
                format: "json"
            },
            success: function(response) {
               Ext.getStore("MyJsonPStore").setData(response.items);
            },
            failure: function(err) {
               console.log("Error", err);
            }
        });

这是处理 json 数据的方式。

发现您的问题,将您的商店代理更改为:-

 proxy: {
            type: 'rest',  //change it
            url: 'data/getPort.json',
            reader: {
                type: 'json',
                idProperty: 'id',
                rootProperty: 'items',
                totalProperty: 'totalItems'
            }
        }

无需映射数据。

【讨论】:

  • 现在我得到了你想说的,但出于测试目的,我直接给出了我在数据中获得的 JSON 响应,这与获得 ajax 请求响应一样好
  • 现在我想将其项目映射到列表视图项目,但响应的项目​​在 {items:[ 如果我把它拿出来,则在响应中被映射
  • 对不起,但这对我没有帮助,你有没有正确理解我的问题??如果没有,请告诉我,我会以适当的方式向你解释吗?因为我没有继续解决这个问题,我需要你的帮助
  • 我运行了您的代码,并通过更改上述行并为 url 提供正确的路径,成功获得了列表。我从 store 中删除了 fields 属性并删除了模型映射,而是将其设置为 fields: ["reportName", "projectId"]
  • 你能把你能成功运行的代码发给我吗?因为我仍然无法使用您提到的更改运行代码..:(
【解决方案2】:

我以前从未使用过 secha touch 框架,但 JSON 解析非常简单。如果您的设备中已经有 JSON,请尝试以下操作:

http://developer.android.com/reference/android/util/JsonReader.html

然后为您的 ListView 创建一个适配器

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 2021-07-20
    • 1970-01-01
    • 2019-05-31
    相关资源
    最近更新 更多