2012-10-29 227 views
0

我第一次嘗試WP7中的PhoneGap/Cordova 2.1.0,所以我是新手。WP7 - PhoneGap FileTransfer返回空錯誤代碼

我應該做的是通過相機拍攝照片並上傳到服務器。

這是我的代碼:

<!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 } 

一些注意事項:

我其次是this trick在WP7中缺少白名單。

php代碼不是由我寫的,我會在asp.net中完成,如果有人能夠提供一個工作示例與asp.net webservice將非常感激。

謝謝。

編輯

我調試文件傳輸類和我在JsonHelper類錯誤:

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

的錯誤是:InvalidCastException的

回答

1

編輯

嘗試更換

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

與以下

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

原來的答案

到troubleshot此類問題的最簡單的方法是添加參考科爾多瓦庫的源代碼,而不是編譯WP7CordovaClassLib.dll的

科爾多瓦-2.1.0 -incubating-SRC \科爾多瓦-2.1.0 \培養箱-科爾多瓦-WP7 \框架\ WP7CordovaClassLib.csproj

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

,然後添加斷點到獨立\ cordovalib \命令\ 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科爾多瓦在許多不順心的最簡單方法的情況。

+0

我按照你的建議,並在JsonHelper的反序列化選項中出現錯誤。有什麼建議麼? – opaera

+0

@opaera,請參閱更新回答 –

+0

我會盡快嘗試。現在我用Cordova lib版本1.7.0解決了這個問題。我也使用PhoneGap Build來創建Android應用程序,但它不工作,它似乎從未初始化。你對此有何看法?非常感謝你。 – opaera