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。我在类似环境中亲自实施的另外两个建议。
我正在使用 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。我在类似环境中亲自实施的另外两个建议。