Unity3D WWW published async data

I want to publish JSON to a website using the WWW class. But I get this response from the server: "Sync problem." Is there a way to switch from synchronization to async? Thank you.

0
unity3d
source share
2 answers

You can run your WWW task in a coroutine (WWW supports this):

using UnityEngine; public class PostJSON : MonoBehaviour { void Start () { string url = "http://your_url_endpoint"; WWWForm form = new WWWForm(); Hashtable headers = form.headers; headers["Content-Type"] = "application/json"; Hashtable data = new Hashtable(); data["message"] = "a sample message sent to service as json"; string json = JSON.JsonEncode(data); byte[] bytes = Encoding.UTF8.GetBytes(json); WWW www = new WWW(url, bytes, headers); StartCoroutine(WaitForRequest(www)); } IEnumerator WaitForRequest(WWW www) { yield return www // check for errors if (www.error == null) { Debug.Log("WWW Ok!: " + www.data); } else { Debug.Log("WWW Error: "+ www.error); } } } 

Here you have a working project that I use to talk to the json-based REST service called KiiCloud:

http://blog.kii.com/?p=2939

NTN

+1
source share

The answer from German was very useful, but I made some adjustments so that it compiles and starts (with serial serialization / deserialization bits).

Just go to BaseUrl that you want to send, for example, http://www.domain.com/somecontroller/someaction or something else.

 using System; using System.Text; using System.Collections; using System.Collections.Generic; using UnityEngine; [Serializable] public class Person { public string Name; } [Serializable] public class Response { public string SomeValue; } public class PostJSON : MonoBehaviour { public string BaseUrl; private WWWForm form; private Dictionary<string, string> headers = null; void Start () { var basUrlNotSpecified = string.IsNullOrEmpty(BaseUrl); if(basUrlNotSpecified) { Debug.LogWarning("BaseUrl value not specified. Post abandoned."); return; } form = new WWWForm(); headers = form.headers; headers["Content-Type"] = "application/json"; headers["Accept"] = "application/json"; var person = new Person { Name = "Iulian Palade" }; var json = JsonUtility.ToJson(person); byte[] bytes = Encoding.UTF8.GetBytes(json); WWW www = new WWW(BaseUrl, bytes, headers); StartCoroutine(WaitForRequest(www)); } IEnumerator WaitForRequest(WWW www) { yield return www; if (www.error == null) { Debug.Log("WWW Ok!: " + www.text); var response = JsonUtility.FromJson<Response>(www.text); Debug.Log(response.SomeValue); } else { Debug.Log("WWW Error: "+ www.error); } } } 
0
source share

All Articles