0

初めて WP7 で PhoneGap/Cordova 2.1.0 を試しているので、これは初めてです。

私がすべきことは、カメラを通して写真をキャプチャし、サーバーにアップロードすることです。

これは私のコードです:

<!DOCTYPE html>
<html>
<head>
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" />
    <meta http-equiv="Content-type" content="text/html; charset=utf-8"/>
    <title>PhoneGap WP7</title>
    <script type="text/javascript" charset="utf-8" src="cordova-2.1.0.js"></script>

    <script type="text/javascript">

        document.addEventListener("deviceready", onDeviceReady, false);

        function onDeviceReady() { }

        function capturePhoto() 
        {
            // Take picture using device camera and retrieve image
            navigator.camera.getPicture(
                onPhotoDataSuccess, 
                onFail, 
                { 
                    quality: 50, 
                    destinationType: Camera.DestinationType.DATA_URL 
                }
            );
        }

        function onPhotoDataSuccess(imageData) 
        {
            var options = new FileUploadOptions();
            options.fileKey = "file";
            options.fileName = imageData.substr(imageData.lastIndexOf('/') + 1);
            options.mimeType="image/jpeg";

            var params = new Object();

            options.params = params;

            var ft = new FileTransfer();
            ft.upload(imageData, "http://mysite.com/upload.php", win, fail, options);
        }

        function onFail(message) 
        {
            navigator.notification.alert('Failed because: ' + message);
        }


        var win = function(r) 
        {
            navigator.notification.alert(r.responseCode + " - " + r.response + " - " + r.bytesSent);
        }

        var fail = function(error) 
        {
            navigator.notification.alert(eval(error));
        }

    </script>
</head>
<body>
    <h1>PhoneGap Photo Demo</h1>
    <button onclick="capturePhoto();">Capture a Photo</button>
</body>
</html>

これを試してみると、アップロードが機能せず、空のエラー オブジェクトが表示されます。

{ "code":null, "source":null, "target":null, "http_status":null }

いくつかのメモ:

WP7でホワイトリストが見つからないため、このトリックに従いました。

PHPコードは私が書いたものではありません。誰かがasp.net Webサービスで実際の例を提供できれば、私はasp.netでそれを行います。

ありがとう。

編集

FileTransfer クラスをデバッグしたところ、JsonHelper クラスでエラーが発生しました。

using (MemoryStream mem = new MemoryStream(Encoding.UTF8.GetBytes(json)))
{
   result = deserializer.ReadObject(mem);
}

エラー: InvalidCastException

4

1 に答える 1

0

編集

交換してみる

uploadOptions = JSON.JsonHelper.Deserialize<UploadOptions[]>(options)[0];

以下で

options = JSON.JsonHelper.Deserialize<string[]>(options)[0];
uploadOptions = JSON.JsonHelper.Deserialize<UploadOptions>(options);

元の答え

このような問題をトラブルシューティングする最も簡単な方法は、コンパイル済みの WP7CordovaClassLib.dll ではなく、Cordova ライブラリ ソース コードへの参照を追加することです。

cordova-2.1.0-incubating-src\cordova-2.1.0\incubator-cordova-wp7\framework\WP7CordovaClassLib.csproj

http://www.apache.org/dist/incubator/cordova/

次に、standalone\cordovalib\Commands\FileTransfer.cs にブレークポイントを追加します。

    /// <summary>
    /// sends a file to a server
    /// </summary>
    /// <param name="options">Upload options</param>
    public void upload(string options)
    {
        Debug.WriteLine("options = " + options);
        options = options.Replace("{}", "null");

複雑に聞こえますが、私の経験からすると、行ごとのデバッグは、多くの状況で Apache Cordova で何が問題になるのかを理解する最も簡単な方法です。

于 2012-10-29T17:55:54.410 に答える