RadListView 无法读取未定义的 属性 'picture' (Android)

RadListView cannot read property 'picture' of undefined (Android)

我正在使用 RadListView 并有一个使用 loadOnDemand 加载更多图像的列表。每隔一段时间我就会在 Android 上收到一个令人讨厌的错误 Cannot read property 'picture' of undefined,它会冻结整个应用程序一段时间。

这很令人沮丧,因为我一直在想,当它一段时间没有发生时我会修复它,但随后它会随机恢复。我认为完整的项目重构可能会解决问题,但事实并非如此。

我创建了一个有问题的示例项目。 https://github.com/keerl/radlistview-bug.

我还为它创建了一个游乐场:https://play.nativescript.org/?id=H7lJuH&template=play-ng&v=3

我还录制了问题发生的视频。 https://www.youtube.com/watch?v=_EGvw8REek8。这个问题是非常随机的,有时它永远不会触发(这让我觉得我已经解决了它),然后随机数小时后又开始发生。只发生在 Android。我曾尝试使用图像缓存插件 (WebImage),认为是图像加载导致了问题,也许占位符会有所帮助,但这并没有解决问题。

我已经为您更新了 playground。您太早通知 notifyPullToRefreshFinished.

列表

您应该只在加载数据时通知。例如

loadProducts(PullToRefreshInitiated: boolean) {
        return new Promise((resolve, reject) => {
            http.getJSON("https://randomuser.me/api/?results=25&inc=picture").then((r) => {
                this.users$.push(r.results);
                if (PullToRefreshInitiated) {
                    this.listView.notifyPullToRefreshFinished();
                }
                // Load a max of 50 items and then force a pull-to-refresh to get more data.
                if (this.users$.length > 50) {
                    resolve(true);
                }
                else {
                    resolve(false);
                }
            }, (e) => {
                console.log(e)
            });
        });
    }

P.S。我在类似环境中亲自实施的另外两个建议。

  1. 使用图片cache.
  2. 例如使用*ngIf <Image *ngIf="item" [src]="item.picture.medium"></Image>,您可以为您想要的其他块使用标签。