Unity中实现号码归属地的查询

作者: 药药耀耀 | 来源:发表于2016-04-13 15:02 被阅读109次

    这里,我们在Unity中实现号码归属地的查询的功能,本文用到的是Mob的归属地查询免费接口。

    http://www.mob.com,这是Mob的官网网址,首先要注册,然后在免费的API中寻找我们的号码归属地查询的API

    http://apicloud.mob.com/v1/mobile/address/query?key=123456&phone=13300001982

    注意 这里的key在代码中替换成1190a5a6459a8(这是我申请的接口的APPKey值)Phone=后面不没有数字


    下面我们打开Unity 创建一个新工程,创建一个画布,进行简单的UI搭建,结构比较简单 这里不在赘述。

    这是UI的结构图

    注意搭建时候我们的输入框InputField(我把它命名为PhoneNumLabel)的属性 Character Limit为11,因为我们电话都是11位的,Content Type属性为 Integer Number,表示输入的必须是数字



    下面在Assets文件夹下创建Script文件夹来存放脚本,我们需要创建六个脚本


    首先创建PhoneModle脚本:

    usingUnityEngine;

    usingSystem.Collections;

    publicclassPhoneModle:MonoBehaviour{

    publicstringmCity;

    publicstringmCityCode;

    publicstringmMobileNumber;

    publicstringmOperator;

    publicstringmProvince;

    publicstringmZipCode;

    publicPhoneModle(stringcity,stringcityCode,stringmoblieNumber,stringOperator,stringProvince,stringZipCode)

    {

    this.mCity=city;

    this.mCityCode=cityCode;

    this.mMobileNumber=moblieNumber;

    this.mOperator=Operator;

    this.mProvince=Province;

    this.mZipCode=ZipCode;

    }

    publicPhoneModle(string[]result)

    {

    intindex=0;

    this.mCity=result[index++];

    this.mCityCode=result[index++];

    this.mMobileNumber=result[index++];

    this.mOperator=result[index++];

    this.mProvince=result[index++];

    this.mZipCode=result[index++];

    }

    }

    这里写了两个初始化方法一个是单个的字符串 一个是字符串的数组 实现功能都一样

    然后创建ItemView脚本:

    usingUnityEngine;

    usingSystem.Collections;

    usingUnityEngine.UI;

    publicclassItemView:MonoBehaviour{

    //模型

    publicPhoneModlemPhoneModle;

    //UI组件

    publicTextmPhoneNumValue;

    //找物体(引用)

    voidAwake()

    {

    mPhoneNumValue=GameObject.Find("PhoneHomeValue").GetComponent();

    }

    //让UI组件显示数值

    publicvoidShow()

    {

    mPhoneNumValue.text=mPhoneModle.mCity;

    }

    }

    同时我们把它挂载到我们的画布上,注意引入UI的命名空间

    然后我们接着创建ViewController脚本:

    usingUnityEngine;

    usingSystem.Collections;

    usingUnityEngine.UI;

    publicclassViewController:MonoBehaviour{

    ItemViewmItemView;

    InputFieldmPhoneNumInput;

    TextmPhoneHomeValue;

    voidAwake()

    {

    mItemView=GetComponent();

    mPhoneNumInput=GameObject.Find("PhoneNumLabel").GetComponent();

    mPhoneHomeValue=GameObject.Find("PhoneHomeValue").GetComponent();

    mPhoneNumInput.onEndEdit.AddListener(OnEndEdit);

    }

    //输入完毕之后点击

    voidOnEndEdit(stringvalue)

    {

    stringurl=Global.MobileAPI+value;

    HTTPUtil.GetInstance().HttpRequestText(url,MyCallBack);

    }

    //注意这里是最后的显示方法

    void MyCallBack(stringresult)

    {

    string[]res=MyJSON.GetResultArray(result);

    mItemView.mPhoneModle=newPhoneModle(res);

    mItemView.Show();

    }

    }

    同样 我们把它也挂载到我们的画布上

    接着我们创建Global脚本:

    usingUnityEngine;

    usingSystem.Collections;

    public class Global{

    public const string MobileAPI="http://apicloud.mob.com/v1/mobile/address/query?key=1190a5a6459a8&phone=";

    }

    注意这是一个单例脚本 不继承MonoBehaviour类 同时注意开篇时候说的,把key后面的字符串变成你申请的那个APPKey,等号后面没有数字

    接着我们创建HTTPUtil脚本:

    usingUnityEngine;

    usingSystem.Collections;

    public  class  HTTPUtil:MonoBehaviour{

    //声明构造函数

    private static HTTPUtilinstance;

    //创建构造函数方法

    public static HTTPUtilGetInstance()

    {

    if(instance==null){

    instance=newGameObject().AddComponent();

    }

    return instance;

    }

    //负责加载资源

    publicvoidHttpRequestText(stringurl,System.ActionsuccessCallBack)

    {

    StartCoroutine(IEHttpRequestText(url,successCallBack));

    }

    //使用协程加载资源

    IEnumeratorIEHttpRequestText(stringurl,System.ActionsuccessCallBack)

    {

    WWWwww=newWWW(url);

    yieldreturnwww;

    //执行回调

    successCallBack(www.text);

    }

    }

    这个脚本主要是通过协程去加载我们去请求的数据

    最后,就是创建我们的Json数据解析类(因为传送过来的数据都包含在json格式的字符串中 我们想使用其中的一个字符串,必须先把它解析一下)

    MyJSON脚本:

    usingUnityEngine;

    usingSystem.Collections;

    usingSystem;

    publicstaticclassMyJSON{

    //判断消息是否OK

    privatestaticboolIsOK(stringjson)

    {

    intmsgIndex=json.IndexOf(":")+1;

    intfirstIndex=json.IndexOf(",")-2;

    stringresult=json.Substring(msgIndex+1,firstIndex-msgIndex);

    returnresult.Equals("success");

    }

    //获取对象

    publicstaticstringGetResultJson(stringjson)

    {

    if(!IsOK(json))return"error";

    intlastIndex=json.LastIndexOf(",");

    intfirstIndex=json.IndexOf("city")-1;

    intlen=lastIndex-firstIndex-1;

    stringresult=json.Substring(firstIndex,len);

    returnresult;

    }

    publicstaticstring[]GetResultArray(stringjson)

    {

    if(!IsOK(json))returnnull;

    intlastIndex=json.LastIndexOf(",");

    intfirstIndex=json.IndexOf("city")-1;

    intlen=lastIndex-firstIndex-1;

    stringresult=json.Substring(firstIndex,len);

    string[]array=result.Split(newchar[]{','});

    string[]res=newstring[array.Length];

    for(inti=0;i

    {

    intstart=array[i].IndexOf(":")+2;

    intend=array[i].LastIndexOf('"');

    res[i]=array[i].Substring(start,end-start);

    }

    returnres;

    }

    }

    注意引入System的命名空间

    这时 运行我们的程序 就可以实现我们的功能了

    相关文章

      网友评论

        本文标题:Unity中实现号码归属地的查询

        本文链接:https://www.haomeiwen.com/subject/jiowlttx.html