利用mvc 和数据结合来做mail 邮件系统

先看看效果做出来的效果 ,当然很多效果都是必须建立在你了解的基础上才能够更好的完成  不多说 直接看效果

利用mvc 和数据结合来做mail 邮件系统利用mvc 和数据结合来做mail 邮件系统利用mvc 和数据结合来做mail 邮件系统利用mvc 和数据结合来做mail 邮件系统

M:代码:

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class MailModle {


private MailModle()
    {
        GetAwardItemInfo();
        GetMailItemInfo();
    }
    static MailModle _intance;
    public static MailModle Instance()
    {
        if (_intance == null)
        {
            _intance = new MailModle();
        }
        return _intance;
    }
    public struct AwardInfo
    {
        public string id;
        public string name;
        public string icon;
    }
    public enum MailType
    {
        COMMON=0,
        AWARD=1
    }
    public struct AwardItem
    {
        public string id;
        public int count;
        public AwardInfo awardInfo;
    }
    public struct MailInfo
    {
        public string id;
        public MailType mailType;
        public string title;
        public string content;
        public string time;
        public string taskid;
        public List<AwardItem> awardItem;
         
    }
    Dictionary<string, AwardInfo> awardDit = new Dictionary<string, AwardInfo>();
    Dictionary<string, MailInfo> mailDit = new Dictionary<string, MailInfo>();
    List<MailInfo> mailInfoList = new List<MailInfo>();
    void GetAwardItemInfo()
    {
        TextAsset textAsset = Resources.Load("award",typeof(TextAsset)) as TextAsset;
        string tempString = textAsset.text.Replace("\r\n","\r");
        string[] tempArray = tempString.Split("\r"[0]);
        AwardInfo tempAwardInfo = new AwardInfo();
        for(int i = 1; i < tempArray.Length - 1; i++)
        {
            string[] tempStr = tempArray[i].Split(","[0]);
            tempAwardInfo.id = tempStr[0];
            tempAwardInfo.name = tempStr[1];
            tempAwardInfo.icon = tempStr[2];
            awardDit.Add(tempAwardInfo.id,tempAwardInfo);
        }
    }
    AwardInfo GetAwardById(string id)
    {
        return awardDit[id];
    }
    void GetMailItemInfo()
    {
        TextAsset textAssent = Resources.Load("mail",typeof(TextAsset))as TextAsset;
        string tempString = textAssent.text.Replace("\r\n","\r");
        string[] tempArray = tempString.Split("\r"[0]);
        MailInfo tempMailInfo = new MailInfo();
        AwardItem awardItem = new AwardItem();
        for(int i = 1; i < tempArray.Length-1; i++)
        {
            string[] tempStr = tempArray[i].Split(","[0]);
            tempMailInfo.id = tempStr[0];
            tempMailInfo.mailType = (MailType)Enum.Parse(typeof(MailType),tempStr[1]);
            tempMailInfo.title = tempStr[2];
            tempMailInfo.content = tempStr[3];
            tempMailInfo.awardItem = new List<AwardItem>();
            for (int j = 4; j < tempStr.Length; j++)
            {
                if (tempStr[j].Equals(""))
                {
                    break;
                }
                if (j % 2 == 0)
                {
                    awardItem.id = tempStr[j];
                    continue;
                }
                else
                {
                    awardItem.count = int.Parse(tempStr[j]);
                }
                awardItem.awardInfo = GetAwardById(awardItem.id);
                
                tempMailInfo.awardItem.Add(awardItem);
               
            }
            mailDit.Add(tempMailInfo.id, tempMailInfo);


        }
    }
    public MailInfo GetMailInfoById(string id)
    {
        return mailDit[id];
    }
    public void AddMail(string id,MailType type,string time,string title=null,string content=null, string taskid=null)
    {
        MailInfo mailInfo = new MailInfo();
        if (type == MailType.COMMON) { 
            mailInfo.id = id;
            mailInfo.mailType = type;
            mailInfo.time = time;
            mailInfo.title = title;
            mailInfo.content = content;
            
        }else
        {
            mailInfo = GetMailInfoById(id);
            List<AwardItem> list = mailInfo.awardItem;
            mailInfo.time = time;
        }
       
        mailInfo.taskid = taskid;
        Debug.Log("AddMail:::::"+mailInfo.taskid);
        mailInfoList.Add(mailInfo);
    }
    public void RemoveMail(int index)
    {
        mailInfoList.RemoveAt(index);


    }
    public List<MailInfo> GetMailInfoList()
    {
        
        return mailInfoList;
    }
    
    
}

再看View 代码:

先看一下Item代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class MailDetailView : MonoBehaviour {


    public UILabel mTitle;
    public UILabel mContent;
    public GameObject mScrollView;
    public GameObject mawardcontent;
    public UIButton mAwardButton;
    public UIButton mDeleteButton;
void Start () {

}
public void init()
    {
        mTitle.text = "";
        mContent.text = "";
        mScrollView.gameObject.SetActive(false);
        mAwardButton.gameObject.SetActive(false);
        mDeleteButton.gameObject.SetActive(false);
    }
// Update is called once per frame
void Update () {

}
   public void Refresh(MailModle.MailInfo mailInfo)
    {
        int count = mawardcontent.transform.childCount;
        for(int i = 0; i < count; i++)
        {
            Destroy(mawardcontent.transform.GetChild(i).gameObject);
        }
        mTitle.text = mailInfo.title;
        mContent.text = mailInfo.content;
        //如果是奖励类型,显示奖励列表内容并且领取button显示,隐藏删除button
        if (mailInfo.mailType == MailModle.MailType.AWARD)
        {
            mScrollView.gameObject.SetActive(true);
            mAwardButton.gameObject.SetActive(true);
            mDeleteButton.gameObject.SetActive(false);
            mawardcontent.gameObject.SetActive(true);
            List<MailModle.AwardItem> awardItem = mailInfo.awardItem;
            for(int i = 0; i < awardItem.Count; i++)
            {
                GameObject go = (GameObject)Instantiate(Resources.Load("awardN"));
                //go.transform.Find("icon").GetComponent<UISprite>().spriteName = awardItem[i].awardInfo.icon;
                go.transform.Find("name").GetComponent<UILabel>().text=awardItem[i].awardInfo.name;
                go.transform.Find("count").GetComponent<UILabel>().text=awardItem[i].count.ToString();
                UISprite newType = new UISprite();
                Debug.Log(awardItem[i].awardInfo.icon);
                go.transform.Find("icon").GetComponent<UISprite>().spriteName = awardItem[i].awardInfo.icon;
                go.transform.SetParent(mawardcontent.transform);
                go.transform.localPosition = Vector3.zero;
                go.transform.localScale = Vector3.one;
                mawardcontent.GetComponent<UIGrid>().enabled = true;
            }
        }
        else
        {
            mScrollView.gameObject.SetActive(false);
            mawardcontent.gameObject.SetActive(false);
            mDeleteButton.gameObject.SetActive(true);
        }
    }
    public void OnGetButtonClick()
    {
        SendMessageUpwards("OnGetOnClick");
    }
    public void OnDeleteButtonClick()
    {
        SendMessageUpwards("OnDeleteClick");
    }
}


MailView:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class MailView : MonoBehaviour {


// Use this for initialization
    
void Start () {

}

// Update is called once per frame
void Update () {

}
    public void Refresh(List<MailModle.MailInfo> mailInfoList)
    {
        for(int i=0;i<mailInfoList.Count; i++)
        {
            GameObject go = (GameObject)Instantiate(Resources.Load("mailViewN"));
            go.transform.SetParent(this.transform);
            go.name = i + "";
            go.transform.Find("title").GetComponent<UILabel>().text=mailInfoList[i].title;
            go.transform.Find("time").GetComponent<UILabel>().text=mailInfoList[i].time;
            go.transform.SetParent(this.transform);
            go.transform.localPosition = Vector3.zero;
            go.transform.localScale = Vector3.one;
            this.gameObject.GetComponent<UIGrid>().enabled = true;
            EventDelegate.Add(go.transform.GetComponent<UIButton>().onClick,
                delegate ()
                {
                    OnClick(go.gameObject);
                }
                );
        }
    }
    public void OnClick(GameObject sender)
    {
        string name = sender.name;
        int index = int.Parse(sender.name);
        SendMessageUpwards("OnMailClick",index);
    }
}


C代码 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;


public class MailController : MonoBehaviour {


    MailModle mailMode;
    public MailView mailView;
    public MailDetailView mailDetailView;
    int currentindex;
    private List<ArrayList> dataList;
    
void Start () {
       
        mailMode = MailModle.Instance();
        ReadData();
        UpdateView();
    }

// Update is called once per frame
void Update () {
      


    }
    void UpdateView()
    {
        int count = mailView.transform.childCount;
        
        for(int i = 0; i < count; i++)
        {
            Destroy(mailView.transform.GetChild(i).gameObject);
        }
        List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
        mailInfoList = mailMode.GetMailInfoList();
        mailView.Refresh(mailInfoList);
        mailDetailView.init();
    }
    public void OnMailClick(int index)
    {
        currentindex = index;
        List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
        mailInfoList = mailMode.GetMailInfoList();
        mailDetailView.Refresh(mailInfoList[currentindex]);


    }
    public void OnGetOnClick()
    {


        UpadateCoin();
        DeleteMailData();
        mailMode.RemoveMail(currentindex);
        UpdateView();
    }
    public void OnDeleteClick()
    {


        DeleteMailData();
        mailMode.RemoveMail(currentindex);
        UpdateView();
    }
    public void ReadData()
    {
        string path = Application.streamingAssetsPath + "/task.sqlite";
        DataManager.Instance().ConnectionDB(path);
        string sql = "select * from maildata";
        List<ArrayList> datalist = new List<ArrayList>();
        datalist = DataManager.Instance().ExcuteQuery(sql);
        for(int i = 0; i < datalist.Count; i++)
        {
            ArrayList arr = new ArrayList();
            arr = datalist[i];
            mailMode.AddMail(arr[0].ToString(),(MailModle.MailType)(int.Parse(arr[1].ToString())),arr[2].ToString(),arr[3].ToString(),arr[4].ToString(),arr[5].ToString());
        }
    }
    void UpadateCoin()
    {
        //更
        List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
        mailInfoList = mailMode.GetMailInfoList();
        int blood = 0;
        int coin = 0;
        int star = 0;
        string mycoin="";
        List<MailModle.AwardItem> awardItemList = mailInfoList[currentindex].awardItem;
        for (int i = 0; i < awardItemList.Count; i++)
        {
            string id = awardItemList[i].id;
            if (id.Equals("1001"))
            {//血量
                blood = awardItemList[i].count;
                Debug.Log("------------"+blood);
            }
            if (id.Equals("1002"))
            {//金币
                coin = awardItemList[i].count;
                Debug.Log("------------" + coin);
            }
            if (id.Equals("1003"))
            {//星星
                star = awardItemList[i].count;
                Debug.Log("------------" + star);
            }
        }
        string path = Application.streamingAssetsPath + "/task.sqlite";
        string sql = "where * from accountproduct";
        DataManager.Instance().ConnectionDB(path);
        List<ArrayList> accountList = DataManager.Instance().ExcuteQuery(sql);
        for (int i = 0; i < accountList.Count; i++)
        {
            ArrayList arrtemp = accountList[i];
            coin += int.Parse(arrtemp[0].ToString());
            blood += int.Parse(arrtemp[1].ToString());
            star += int.Parse(arrtemp[2].ToString());
            mycoin = arrtemp[3].ToString();
        }
        Debug.Log("Coin:" + coin + "blood:" + blood + "star:" + star+mycoin);
        string sqlAddcoin = "update accountproduct set coincounts=" + coin;
        sqlAddcoin += ",blood=" + blood;
        sqlAddcoin += ",stars=" + star;
        sqlAddcoin += " where name='mycoin'";
        DataManager.Instance().ConnectionDB(path);
        DataManager.Instance().ExecuteNonQuery(sqlAddcoin);
    }
    void DeleteMailData()
    {
        //通过taskid来连接 我们的点击物体和数据的连接 进行删除数据库中的数据
        List<MailModle.MailInfo> mailInfoList = new List<MailModle.MailInfo>();
        mailInfoList = mailMode.GetMailInfoList();
        Debug.Log(currentindex);
        string taskid = mailInfoList[currentindex].taskid.ToString();
        Debug.Log("当前删除的是:" + taskid);
        string path = Application.streamingAssetsPath + "/task.sqlite";
        DataManager.Instance().ConnectionDB(path);
        string sql = "delete from maildata where taskid=" + taskid;
        DataManager.Instance().ExecuteNonQuery(sql);
    }
}


data代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Mono.Data.Sqlite;
public class DataManager {
   //数据连接 读取数据
   private DataManager()
    {


    }
    private static DataManager _intance;
    public static DataManager Instance()
    {
        if (_intance == null)
        {
            return _intance = new DataManager();
        }
        return _intance;
    }
    SqliteConnection conn = null;
    public void ConnectionDB(string path)
    {
        path = "data source="+path;
        if (conn == null)
        {
            conn = new SqliteConnection(path);
        }
        else
        {
            Debug.Log("数据库已经连接了");
        }
    }
    public void OpenDB()
    {
        if (conn == null)
        {
            Debug.Log("数据没有链接成功");
        }
        try
        {
            conn.Open();
        }catch(System.Exception exp)
        {
            Debug.Log("OpenDB:"+exp);
        }
    }
    public void CloseDB()
    {
        if (conn == null)
        {
            Debug.Log("CloseDB:数据没有链接成功");
        }
        try
        {
            conn.Close();
        }catch(System.Exception exp)
        {
            Debug.Log("CloseDB:"+exp);
        }
    }
    public void ExecuteNonQuery(string sql)
    {
        OpenDB();
        SqliteCommand cmd = conn.CreateCommand();
        cmd.CommandText = sql;
        cmd.ExecuteNonQuery();
        cmd.Dispose();
        CloseDB();
    }
    public  List<ArrayList>ExcuteQuery(string sql)
    {
        OpenDB();
        Debug.Log("执行数据:ExcuteQuery");
        SqliteCommand cmd = conn.CreateCommand();
        cmd.CommandText = sql;
        List<ArrayList> list = new List<ArrayList>();
        try
        {
            SqliteDataReader reader = cmd.ExecuteReader();
            while(reader.Read()){
                ArrayList arr = new ArrayList();
                for(int i = 0; i < reader.FieldCount; i++)
                {
                    arr.Add(reader.GetValue(i));
                }
                list.Add(arr);
            }
        } catch(System.Exception exp)
        {
            Debug.Log(exp);
        }
        
        CloseDB();
        return list;
    }


}