现在的位置: 首页 > 综合 > 正文

Unity3d json 数据库

2013年06月15日 ⁄ 综合 ⁄ 共 5548字 ⁄ 字号 评论关闭
新建BrowserHistoryForm.CS

using 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();//用来存储新产生的商品GameObject
public 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;
   }
}
}

抱歉!评论已关闭.