2015-07-12 66 views
0

我正在使用Parse開發一款遊戲。 一切正常,直到我嘗試上傳下載文件,沒有任何重要的他的分機,我總是得到這個錯誤:錯誤上傳文件解析unity3D

URL「get_version只能從主線程中調用」 = http://www.hostingpics.net/viewer.php?id=764075parseError.png

,這是我的腳本:

byte[] data = System.Text.Encoding.UTF8.GetBytes("Working at Parse is great!"); 
      ParseFile file = new ParseFile("resume.txt", data); 
      Task saveTask = file.SaveAsync(); 
      var player = new ParseObject ("FilesLibrary"); 
      player ["Number"] = 155; 
      player ["Files"] = file; 
      saveTask = player.SaveAsync(); 

我試圖把這個腳本放在不同的地方,但我總是遇到同樣的問題。

+0

到底在哪你打從這個腳本?我知道你說過你在不同的地方嘗試過,那些地方是什麼? –

+0

我試過它在更新函數中,按鈕的OnClick事件,couroutine,隊列;問題是,如果我使用任何其他數據類型而沒有問題,我嘗試推送文件時,只有這個問題。 –

回答

0

在嘗試將文件保存到數據庫對象之前,您需要確保將文件首先上傳到解析。

Parse Unity文檔不太好,因爲它不適合Unity的線程模型。我會建議使用co-routines來完成所有的Parse調用。

我張貼這對統一答案爲好,但你的想法..

// The file first needs to be uploaded to Parse before it can be saved to the object in the database 
ParseFile _playerFile; 

public void CreatePlayer() 
{ 
    StartCoroutine (UploadPlayerFile ((response) => { 
     if(response == 1) 
      StartCoroutine(CreateProjectAsync());       
     else 
      Debug.LogError("The file could not be uploaded"); 
    })); 
}   

IEnumerator UploadPlayerFile(Action <int> callback) 
{ 
    var fileBytes = System.IO.File.ReadAllBytes (@"C:\myfile.jpg"); 
    _playerFile = new ParseFile ("file.jpg", fileBytes, "image/jpeg"); 

    var saveTask = _playerFile.SaveAsync(); 

    while (!saveTask.IsCompleted) 
     yield return null;   

    if (saveTask.IsFaulted) { 
     Debug.LogError ("An error occurred while uploading the player file : " + saveTask.Exception.Message); 
     callback (-1); 
    } else {    
     callback (1); 
    }  
} 

IEnumerator CreateProjectAsync() 
{   
    ParseObject player = new ParseObject ("Player"); 
    player ["Number"] = 111; 
    player ["Files"] = _playerFile; 

    var saveTask = player.SaveAsync(); 

    while (!saveTask.IsCompleted) 
     yield return null;   

    if (saveTask.IsFaulted) { 
     Debug.LogError ("An error occurred while creating the player object : " + saveTask.Exception.Message); 

    } else {  
     Debug.Log ("Player created successfully"); 
    }  
} 
0

我想你需要強制你的分析查詢在Main Thread上執行。你可以通過

public readonly static Queue<Action> ExecuteOnMainThread = new Queue<Action>(); 

添加您的查詢在這個隊列中的方法。 Like

ExecuteOnMainThread.Enqueue (() => { 
       StartCoroutine (SaveData (ID, playerName)); }); 

在您的SaveData() Coroutine中,您需要執行Parse查詢。

最後:

void Update() 
{ 
    while (ExecuteOnMainThread != null && ExecuteOnMainThread.Count > 0) 
    { 
     Action currentAction = ExecuteOnMainThread.Dequeue(); 
     if (currentAction != null) 
     { 
      currentAction.Invoke(); 
     } 
    } 
} 
+0

相同的錯誤訊息 –

0

奇怪,同一個腳本正常工作與統一4.6而不是5.1!