我的应用效果很好:
run android-device
时,使用本地或部署的服务器但不知何故,当我在these instructions之后构建它时,在第一次服务器调用时,例如:
console.log("test1");
Meteor.call("someMethod", function (error, result) {
console.log("test2");
});
// yes I know how asynchronous calls work
console.log("test3");
或者:
console.log("test1");
Meteor.loginWithPassword("validUsername", "validPassword", function (error, result) {
// should print no matter if the credentials are good or bad anyway
console.log("test2");
});
console.log("test3");
" TEST2"不会在adb logcat中打印出来,即使" test1"和" test3"做。有一个地图框地图加载正常,所以它不是一个互联网访问问题。此外,启动工作:
Meteor.startup(function () {
console.log("this gets printed in the adb console");
});
所以它不是所有流星方法。我使用了部署和本地服务器:服务器日志中没有报告错误。我还在我的本地服务器上测试了热代码推送,它会在我的手机上重新加载应用程序!但只是在我刚刚安装完应用程序后才第一次启动应用程序。不过,他们之间至少存在某种联系。
我还应该提一下,我已经构建了这个应用程序,之前它运行良好,但我没有在一段时间内构建它,现在它不再工作了。我在两个不同的设备上安装了软件包并得到了完全相同的问题。
以下是我的包裹清单,如果可以提供帮助,全部是最新版本:
meteor-platform
iron:router
sacha:spin
accounts-password
accounts-base
mdg:geolocation
mrt:flash-messages
mdg:camera
useraccounts:ratchet
fastclick
alanning:roles
tap:i18n
simple:imgur
以下是我在本地服务器上启动客户端时的日志:
I/CordovaLog(18991): Changing log level to DEBUG(3)
I/CordovaLog(18991): Found start page location: index.html
D/CordovaLog(18991): file:///android_asset/www/meteor_cordova_loader.js: Line 12 : METEOR CORDOVA DEBUG (meteor_cordova_loader.js) Error reading version file Error: Failed to resolve entry: file:///data/data/com.idz9099616fhad1150nrz/files/meteor/version
D/CordovaLog(18991): file:///android_asset/www/meteor_cordova_loader.js: Line 12 : METEOR CORDOVA DEBUG (meteor_cordova_loader.js) Couldn't load from the manifest, falling back to the bundled assets.
D/CordovaLog(18991): file:///android_asset/www/meteor_cordova_loader.js: Line 12 : METEOR CORDOVA DEBUG (meteor_cordova_loader.js) Loading from url: http://meteor.local
D/CordovaLog(18991): http://meteor.local/d7372e9a56ce9d5ddfb0fea0d5e071cfd699fac8.js: Line 111 : show showSignInLink signIn
这些都是在我点击之前#34;登录"在我的应用程序上最后一个语句只是来自useraccounts:ratchet
包的日志打印。只要我点击"登录":空白页面,并在日志上输出零。 (这是因为我实际上永远无法停止登录,如前所述)上面的日志仍然是永远的。
使用与run android-device
一起安装的应用时,它的输出完全相同,只是在我点击后,下一页显示,一切正常。 (日志工作,就像其他一切一样)与非功能应用程序一样,不再显示日志行。 (除非我像往常一样开始使用应用程序)
真正让我感到困惑的是,当我使用run android-device
安装应用时,它在我的手机上运行得非常好。即使我停止调试并将此版本作为独立应用程序使用,它也能完美运行!但我无法让用户使用meteor run
来安装我的应用,是吗?
答案 0 :(得分:0)
根据您提供的信息,您的代码中似乎存在竞争条件问题。我不确定这是什么,但你所描述的问题的特征使它很有可能。
在本地服务器上它没有弹出,因为连接是相当即时的,但在远程服务器上它更是一个问题,因为由于更高的延迟,数据可能还没有准备好。
基本上,您的代码中有喜欢这样的东西,或者某种方式的变体:
var doc = MyCollection.findOne();
return doc.name
事情是MyCollection.findOne()
是null
(因为数据尚未加载)。这会调出cannot read 'name' of undefined
错误(客户端而不是服务器端),这会停止执行更多代码,这就是为什么您的屏幕是白屏并且订阅没有运行。
如何找到确切的位置。尝试访问adb
以查看设备上的客户端日志或查看并使用xxx.meteor.com
/您在Web浏览器上部署的服务器登录,并密切关注JS控制台以查找其弹出的位置起来。 重现此问题的关键是与服务器的连接速度比本地主机上的速度慢
该修复仅仅是因为缺少数据,即return doc && doc.name
而不是return doc.name
或if(doc != null) return doc.name;