【问题标题】:App Crashing on contact.save() when using ID - Apache Cordova使用 ID 时应用程序在 contact.save() 上崩溃 - Apache Cordova
【发布时间】:2015-06-10 22:05:10
【问题描述】:

编辑:我已经在多个 API 和一个实际的 android 设备上尝试过这个,但它仍然在保存时崩溃。

我正在使用 Tools for Apache Cordova for Visual Studio 和 cordova 联系人插件 (v2.13) 在 Android 上开发一个基于联系人的应用程序。我目前可以保存和检索联系人,但无法更新联系人。我正在使用 genymotion 模拟器。和设备原生联系人列表

您应该能够通过传入已经存在的联系人 ID 来更新联系人。

我有联系人对象并且正在填充所有字段,但是当我尝试保存它时,应用程序只是崩溃并且没有错误消息。

我知道这是联系人 v1.3 及更低版本中的一个问题,但已在他们的问题列表中标记为已解决。

Contact Issue Resolution Documentation

这是我的对象的屏幕截图以及完整的 AngularJS 代码

droidSync.controller('managerController', function ($scope) {

    //Initialize model
    $scope.contact = {};

    // Create a new contact
    $scope.createContact = function () {
        // Contact Object
        contact = navigator.contacts.create();
        $scope.saveContact();
    };

    // Pick Contact from Device
    $scope.editContact = function () {
       contact = navigator.contacts.pickContact(function(contact){
            console.log(contact);

            //This only updates the text fields. It does not actually assign new values to the object
            $scope.$apply(function () {
                $scope.contact.firstName = contact.name.givenName;
                $scope.contact.lastName = contact.name.familyName;
                $scope.contact.mobileNo = contact.phoneNumbers[0].value;
                $scope.contact.homeNo = contact.phoneNumbers[1].value;
                $scope.contact.email = contact.emails[0].value;
                $scope.contact.id = contact.id;
            });
        })
    };

    // Delete Contact from Device
    $scope.deleteContact = function () {

        //Delete Function Here

    };

    $scope.saveContact = function () {

        var contact = navigator.contacts.create();

        if ($scope.contact.id !== "undefined") {
            contact.id = $scope.contact.id;
        }

        // Display Name and Email
        contact.displayName = $scope.contact.firstName;
        contact.nickname = $scope.contact.lastName;

        var emails = [];
        emails[0] = new ContactField('work', $scope.contact.email, true)
        contact.emails = emails;

        // Phone Numbers
        var phoneNumbers = [];
        phoneNumbers[0] = new ContactField('mobile', $scope.contact.mobileNo, true); // preferred number
        phoneNumbers[1] = new ContactField('home', $scope.contact.homeNo, false);
        contact.phoneNumbers = phoneNumbers;

        // Names
        var name = new ContactName();
        name.givenName = $scope.contact.firstName;
        name.familyName = $scope.contact.lastName;
        contact.name = name;

        // save to device
        contact.save();
    }
});

droidSync.controller('settingsController', function ($scope) {

});

【问题讨论】:

  • 在日志猫中没有任何内容?
  • 对不起,您的意思是 Visual Studio 输出窗口吗?有类似退出的错误-1。在其他地方我可以找到更详细的信息吗?
  • 您是否尝试在设备调试模式下对其进行测试?有些 API 根本不兼容模拟器,有些 API 不兼容某些版本的 Android。命令失败,退出代码通常在构建时发生,尝试清除cordova缓存。
  • 今晚我试试,谢谢。
  • 不走运,在真实设备和我测试过的任何 API 上仍然崩溃

标签: android angularjs cordova visual-studio-cordova


【解决方案1】:

原来是主脚本文件被加载到了错误的位置......我在<head>标签中引用了它,它需要进入<body>末尾的cordova引用所在的位置

<!-- DroidSync references -->
<!-- WHERE IT WAS -->
    <link href="css/index.css" rel="stylesheet" />
    <link href="css/ionicons.css" rel="stylesheet" />
    <link href="Content/ionic.css" rel="stylesheet">
</head>

<!-- Cordova reference, this is added to your app when it's built. -->
    <script src="app/scripts.js"></script> <!-- wHERE IT WAS SUPPOSED TO GO -->
    <script src="cordova.js"></script>
    <script src="scripts/platformOverrides.js"></script>
    <script src="scripts/index.js"></script>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-12
    相关资源
    最近更新 更多