这里,我们在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的命名空间
这时 运行我们的程序 就可以实现我们的功能了
网友评论