RadListView无法读取未定义的属性“图片”(Android)

时间:2019-03-06 02:06:33

标签: nativescript angular2-nativescript nativescript-angular nativescript-telerik-ui

我正在使用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),以为图像加载是造成问题的原因,也许占位符会有所帮助,但这并不能解决问题。

1 个答案:

答案 0 :(得分:0)

我为您更新了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>,您可以将Label用于所需的else块。