Unity3d json 数据库

来源:互联网 发布:windows运行放在哪里 编辑:程序博客网 时间:2024/05/22 11:36
新建BrowserHistoryForm.CSusing UnityEngine;using System.Collections;using System;using Bitverse.Unity.Gui;using Newtonsoft.Json.Linq;using System.Text;public class BrowserHistoryForm : BitForm {    private string jsonURL="http://XXXXXXXXXXXXXXXXXXXXXXX";   //单条记录private string jsonURLget = "http://XXXXXXXXXXXXXXXXXXXXXXX"; //查询多条记录private string jsonURLsave = "http://XXXXXXXXXXXXXXXXXXXXXXX"; //保存单条记录private string jsonURLdelete = "http://XXXXXXXXXXXXXXXXXXXXXXX"; //删除单条记录public JArray shopcarArray;public GameObject Group;public GameObject prefab;public ArrayList groupList = new ArrayList();//用来存储新产生的商品GameObjectpublic int _x = 0;public int _y = 0;public int _width = 300;public int _height = 400; //全局变量不能写在函数里面。public string goodsname ;public string goodsprice ;public string goodsid;public string userid;public void Start() {   StartCoroutine(DoGetMultitermData());   UpdateGrouplist(0);  }public void OnGUI(){   //~ if (_visible)   //~ {    BeforeOnGUI();    GUI.matrix = transform.localToWorldMatrix;    for (int i = 0, count = transform.childCount; i < count; i++)    {     Transform ch = transform.GetChild(i);     BitControl c = (BitControl)ch.GetComponent(typeof(BitControl));     c.Draw();    }    AfterOnGUI();   //~ }}protected virtual void BeforeOnGUI() { }   protected virtual void AfterOnGUI() {    if ((GameObject.Find("BrowserHistoryWindow/Button").GetComponent("BitButton") as BitButton).click) {    ClearGroup("1");   }   //最多显示20个商品   if (groupList.Count == 21) {    print(groupList.Count);    //DeleteGroup(20,"1");    Transform ch = GameObject.Find("BrowserHistoryWindow/ScrollView").transform.GetChild(0);    string goodsid = ch.name;    groupList.RemoveAt(20);       StartCoroutine(DeleteData("1",goodsid));    Destroy(ch.gameObject);   }}//获取单条记录 public IEnumerator DoGetSingleData(string id) {   //获取json数据的方法    WWW getwww = new WWW (jsonURL + id);    yield return getwww;    string jsonObj1 = getwww.data;    //单条json记录   JObject o = JObject.Parse(jsonObj1);   JArray sizes = (JArray)o["commodity"];   goodsname = (string)sizes[0]["name"];   goodsprice = (string)sizes[0]["price"];   goodsid = id;   (GameObject.Find("JoinCartForm/JoinCartWindow/TextArea1").GetComponent("BitTextArea") as BitTextArea).Text = goodsname;     (GameObject.Find("JoinCartForm/JoinCartWindow/TextField2").GetComponent("BitTextField") as BitTextField).Text = goodsprice;    StartCoroutine(SaveData("1",goodsid));} //初始化时获取多条记录public IEnumerator DoGetMultitermData(){   //获取json数据的方法    WWW getwww = new WWW (jsonURLget);    yield return getwww;    string jsonObjget = getwww.data;   if(jsonObjget != "") {    JObject o = JObject.Parse(jsonObjget);     JArray sizes = (JArray)o["browserhistory"];    shopcarArray = sizes;    for(int i = 0;i<shopcarArray.Count;i++){     string incartName = (string)shopcarArray[i]["name"];     string incartPrice = (string)shopcarArray[i]["price"];     string incartGoodsid = (string)shopcarArray[i]["commodity_id"];     string incartUserid = (string)shopcarArray[i]["user_id"];     GameObject Group = NewGroup(incartUserid,incartGoodsid,incartName,incartPrice);     groupList.Add(Group);        UpdateGrouplist(0);     BitControl GroupScript = (BitControl)Group.GetComponent(typeof(BitGroup));     GroupScript.Position = new Rect(_x,_y+80*i,_width,_height);    }   }}//保存记录public IEnumerator SaveData(string userid,string id){   //提交JSON数据的方法    Hashtable mydata=new Hashtable();    mydata.Add("user_id",userid);   mydata.Add("commodity_id",id);     //将数据转换为json字符串    string jsonstring=HashTable2Json(mydata);    WWWForm form = new WWWForm();    form.AddField("jsonstring", jsonstring);    WWW postwww = new WWW(jsonURLsave, form);    yield return postwww;    print (postwww.data);    if(postwww.data=="success"){    AddGroup(userid,goodsid,goodsname,goodsprice);   }else{   }     }//删除记录public IEnumerator DeleteData(string userid,string goodsid) {   WWW getwww = new WWW (jsonURLdelete +"user_id="+userid+"%20and%20commodity_id="+goodsid);    yield return getwww; }public IEnumerator DeleteData(string userid) {   WWW getwww = new WWW (jsonURLdelete +"user_id="+userid);    yield return getwww; }//~ 单条记录转换JSON数据格式public static string HashTable2Json(Hashtable hashtable) {   if (hashtable.Count < 1 ){    return "{}";   }   //初始化   StringBuilder sb = new StringBuilder();   sb.Append('{');   foreach (System.Collections.DictionaryEntry objDE in hashtable) {    if (sb.Length > 1)    sb.Append(",");    sb.Append("\"" + objDE.Key.ToString() + "\":" + "\""+objDE.Value.ToString()+ "\"");   }   sb.Append('}');   return sb.ToString();}    public void AddGroup(string userid,string goodsid ,string goodsname,string goodsprice) {      GameObject Group = NewGroup(userid,goodsid,goodsname,goodsprice);   groupList.Insert(0,Group);//在top处插入   UpdateGrouplist(0);  }  public GameObject NewGroup(string userid,string goodsid ,string goodsname,string goodsprice) {   GameObject Group;    Group = (GameObject)Instantiate(prefab);    Group.transform.parent = transform.Find("BrowserHistoryWindow/ScrollView");     Group.name = goodsid;   // Group.transform.Find("GoodImages").GetComponent(BitDrawImage).Image = goodsimage;   (Group.transform.Find("GoodsName").GetComponent(typeof(BitLabel)) as BitLabel).Text = goodsname;   (Group.transform.Find("GoodsPrice").GetComponent(typeof(BitLabel)) as BitLabel).Text = goodsprice;   (Group.transform.Find("Close").GetComponent("CloseButton") as CloseButton).goodsid = goodsid;   (Group.transform.Find("Close").GetComponent("CloseButton") as CloseButton).userid = userid;   return Group;}//清空public void ClearGroup(string userid) {   groupList.Clear();     Transform parentView = GameObject.Find("BrowserHistoryWindow/ScrollView").transform;   foreach (Transform bitgroup in parentView) {    Destroy(bitgroup.gameObject);   }   StartCoroutine(DeleteData(userid));}//遍历groupList并更新其坐标位置,以及设置相应的序号到其关闭按钮中public void UpdateGrouplist(int startnum){   for(int k = startnum;k<groupList.Count;k++){   //用foreach效率极低!!!   //foreach(GameObject oneGroup in groupList) {     //(oneGroup.GetComponent(typeof(BitGroup)) as BitGroup).Position = new Rect(_x,_y+80*(k++),_width,_height);    (((GameObject)groupList[k]).GetComponent("BitGroup") as BitGroup).Position = new Rect(_x,_y+80*k,_width,_height);    (((GameObject)groupList[k]).transform.Find("Close").GetComponent("CloseButton") as CloseButton).listnum = k;   }}}