请问有会Unity的朋友吗?虚心请教一下,有个问题就是,在编译器上运行正常,然后打包生成exe运行也正常,为什么打包生成apk之后,图中的地方就不会更新了?
exe:
编译器:
apk(手机上):
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.IO.Compression;
using System.Net;
using System.Text;
using System.Xml.Serialization;
using TodayWeather;
using UnityEngine;
using TMPro;
using System.Threading;
// 类 - 获取天气
namespace TodayWeather
{
public class resp
{
public string city { get; set; }
public string updatetime { get; set; }
public string wendu { get; set; }
public string fengli { get; set; }
public string shidu { get; set; }
public string fengxiang { get; set; }
public environment environment { get; set; }
public alarm alarm { get; set; }
public List forecast { set; get; }
}
public class environment
{
public string aqi { get; set; }
public string pm25 { get; set; }
public string suggest { get; set; }
public string quality { get; set; }
public string MajorPollutants { get; set; }
public string time { get; set; }
}
public class alarm
{
public string cityName { get; set; }
public string alarmType { get; set; }
public string alarmDegree { get; set; }
public string alarmText { get; set; }
public string alarm_details { get; set; }
public string standard { get; set; }
public string suggest { get; set; }
}
public class weather
{
public string date { get; set; }
public string high { get; set; }
public string low { get; set; }
public climate day { get; set; }
public climate night { get; set; }
}
public class climate
{
public string type { get; set; }
public string fengxiang { get; set; }
public string fengli { get; set; }
}
}
public class Weather : MonoBehaviour
{
// 创建 TMP 实例对象 WeatherText
public TextMeshProUGUI WeatherText;
public TodayWeather.resp respinfo;
private DateTime NowTime;
private string NowTime_Str;
private long NowTime_Long;
private string weekstr;
public string Today;
public bool TimeS = true;
// 字符串分段 --- 具体网址 API 返回格式见代码最下方
public int get_weather_flag;
private string weatherstr;
private string yesterday;
private string forecast;
private string zhishus;
private string respbase;
private string Todayinfo;
// 创建各个天气数据
private string updatetime;
private string type;
private string wendu;
private string gaowen;
private string diwen;
private string shidu;
private string fengli;
private string fengxiang;
private string sunrise;
private string sunset;
// 实时获取当前系统时间 并转化为字符串格式
void System_Time_Get()
{
NowTime = DateTime.Now.ToLocalTime();
NowTime_Str = string.Format("{0:D}{1:D}{2:D}{3:D}{4:D}{5:D}",
NowTime.Year, NowTime.Month, NowTime.Day, NowTime.Hour, NowTime.Minute, NowTime.Second);
NowTime_Long = long.Parse(NowTime_Str);
// 根据当前系统时间判定星期几:
weekstr = DateTime.Now.DayOfWeek.ToString();
switch (weekstr)
{
case "Monday": weekstr = "星期一"; break;
case "Tuesday": weekstr = "星期二"; break;
case "Wednesday": weekstr = "星期三"; break;
case "Thursday": weekstr = "星期四"; break;
case "Friday": weekstr = "星期五"; break;
case "Saturday": weekstr = "星期六"; break;
case "Sunday": weekstr = "星期日"; break;
}
}
/* 通过左右两个字符串判断筛选夹在中间的字符串
* origin ---> 被筛选字符串
* startString ---> 前筛选字符串
* endString ---> 后筛选字符串
* @example:
* origin ---> "123456"
* startString ---> "12"
* endString ---> "56"
* return ---> "34"
*/
public static string SubStringMiddle(string origin, string startString, string endString)
{
int start, end;
start = origin.IndexOf(startString, 0) + startString.Length;
end = origin.IndexOf(endString, start);
return origin.Substring(start, end - start);
}
// 获取当前天气 101210401(宁波代码) 全国各地代码见代码最下方
private resp GetWeather(int nint)
{
// 获取中国天气网的
string weatherInfoUrl = "http://wthrcdn.etouch.cn/WeatherApi?citykey=" + nint; // 后面数字是城市代码
weatherstr = getHtml2(weatherInfoUrl);
respbase = SubStringMiddle(weatherstr, "" , "" );
yesterday = SubStringMiddle(weatherstr, "" , "");
forecast = SubStringMiddle(weatherstr, "" , "");
zhishus = SubStringMiddle(weatherstr, "" , "");
Todayinfo = SubStringMiddle(forecast, Today, " ");
updatetime = SubStringMiddle(respbase, "" , "");
sunrise = SubStringMiddle(respbase, "" , "");
sunset = SubStringMiddle(respbase, "" , "");
wendu = SubStringMiddle(respbase, "" , "") + "℃";
shidu = SubStringMiddle(respbase, "" , "");
fengli = SubStringMiddle(respbase, "" , "");
fengli = SubStringMiddle(fengli, ", "]]>");
fengxiang = SubStringMiddle(respbase, "" , "");
type = SubStringMiddle(Todayinfo, "" , "");
gaowen = SubStringMiddle(Todayinfo, "" , "");
diwen = SubStringMiddle(Todayinfo, "" , "");
WeatherText.text =
"" +
"今日日期:" + NowTime.Month + "月" + Today + "\n" +
"更新时间:" + NowTime.Hour + ":" + NowTime.Minute + ":" + NowTime.Second + "\n" +
//updatetime + "\n" +
"天 气:" + type + "\n" +
//"日出时间:" + sunrise + "\n" +
//"日落时间:" + sunset + "\n" +
"最高温度:" + gaowen + "\n" +
"最高温度:" + diwen + "\n" +
"温 度:" + wendu + "\n" +
"湿 度:" + shidu + "\n" +
//"风 力:" + fengli + "\n" +
//"风 向:" + fengxiang +
"";
return XmlDeSeralizer(weatherstr);
}
private static string getHtml2(string url)
{
StringBuilder s = new StringBuilder(102400);
HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(url);
wr.Headers[HttpRequestHeader.AcceptEncoding] = "gzip, deflate";
HttpWebResponse response = (HttpWebResponse)wr.GetResponse();
head(response);
GZipStream g = new GZipStream(response.GetResponseStream(), CompressionMode.Decompress);
byte[] d = new byte[20480];
int l = g.Read(d, 0, 20480);
while (l > 0)
{
s.Append(Encoding.UTF8.GetString(d, 0, l));
l = g.Read(d, 0, 20480);
}
response.Close();
return s.ToString();
}
private static void head(HttpWebResponse r)
{
string[] keys = r.Headers.AllKeys; for (int i = 0; i < keys.Length; ++i)
{
Console.WriteLine(keys[i] + " " + r.Headers[keys[i]]);
}
}
public static T XmlDeSeralizer<T>(string xmlStr) where T : class, new()
{
XmlSerializer xs = new XmlSerializer(typeof(T));
using (StringReader reader = new StringReader(xmlStr))
{
return xs.Deserialize(reader) as T;
}
}
// 多线程延时函数---5S
private void DelayFunc()
{
while (true)
{
if (TimeS == false)
{
print("wait sleep");
print("sleep end");
TimeS = true;
print("TimeS is true");
}
}
}
void Get_Weatherinfo()
{
//Debug.Log("在Get_Weatherinfo中准备获取数据");
//if ((NowTime.Second % 5 == 0) && (get_weather_flag == 0))
//{
// GetWeather(101210401);
// get_weather_flag = 1;
//}
GetWeather(101210401);
}
// Start is called before the first frame update
void Start()
{
get_weather_flag = 0;
// 创建一个 thread1 线程1,线程调用 DelayFunc 延时函数
//Thread thread1 = new Thread(new ThreadStart(DelayFunc));
//thread1.Start();
//TimeS = true;
// 1 秒后调用 Get_Weatherinfo 方法,并且此后每隔 10 秒调用一次
InvokeRepeating("Get_Weatherinfo", 1, 10);
}
// Update is called once per frame
void Update()
{
System_Time_Get();
Today = NowTime.Day + "日";
//Get_Weatherinfo();
//if (NowTime.Second % 5 == 2)
// get_weather_flag = 0;
}
}
希望有朋友能教教俺
没看出有什么根据平台产生不一致的地方