小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

windows phone 7 中文天氣預報應用

 空城66 2014-12-16

wp7的應用還是太少了,中文應用更少。雖然有天氣預報應用但是自己感覺并不好用,感覺這樣的程序應該很簡單,于是萌生了自己寫一個的想法。

印證了群里朋友說的一句話:程序員往往都是使用別人的程序覺得這里不好那里不好,等到自己想做一個的時候才發(fā)現(xiàn)水很深。

 

整個過程真是幾經(jīng)波折。先在網(wǎng)上搜索一番,發(fā)現(xiàn)了Windows Phone 7 網(wǎng)絡編程之天氣預報應用,看到xml解析的時候就知難而退了,因為在學校的時候?qū)W習xml無果。于是這個想法在我的onenote里面待了很久,最近終于在工作上需要解析xml硬著頭皮了解了一下,其實并不是那么難。于是開始動手做吧,先后又遇到了網(wǎng)絡文件無法直接調(diào)用,xml文件讀取出來是亂碼等等問題,找了很多資料和文檔,現(xiàn)在終于實現(xiàn)了。

 

 

接下來說下程序的編寫過程:

 

我使用了LINQ to XML來解析xml文件,在加載xml的時候最開始文件路徑我直接填寫了http://www.google.com/ig/api?weather=guangzhou,報錯信息大致是不能直接填寫web網(wǎng)絡路徑。找了一下資料,HttpWebRequest相關的東西沒看明白,使用WebClient來獲取網(wǎng)絡文件資源。這里參考了將網(wǎng)絡資源寫入WP7隔離存儲空間

讀取完成后觸發(fā)事件的機制我并不了解,在這里繞了很久的彎。我將對天氣對象的賦值操作寫在讀取完成的事件里面,而對程序頁面上的TextBlock賦值顯示的語句寫在獲取網(wǎng)絡資源語句之后,實際的執(zhí)行順序是執(zhí)行了獲取資源語句以后并沒有直接跳轉(zhuǎn)到讀取完成事件里面的語句(因此天氣對象的值仍然是空的),直接執(zhí)行了后面的TextBlock賦值語句,最后才跳轉(zhuǎn)到讀取完成的事件里面對天氣對象賦值。結果程序運行顯示的天氣為空。這個事件還得詳細了解。

解決這個問題以后程序能夠順利運行并從網(wǎng)絡更新數(shù)據(jù)了

QQ截圖20110816235625

但是接著問題就來了:在電腦上訪問http://www.google.com/ig/api?weather=guangzhou返回的xml文件是中文的,Windows Phone 7 網(wǎng)絡編程之天氣預報應用的作者也提到,在WP7中訪問這個接口返回的xml文件是英文的,圖中可以看到最高溫度和最低溫度都是華氏溫度單位。評論中有人提到增加&hl=zh-cn以后返回的就是中文,我修改了程序中的相應地址以后,程序變成了這樣:

QQ截圖20110816235204

中文部分全都變成了亂碼!?。≡诰W(wǎng)上搜索了一下找到了問題所在

返回的XML的頭部,<?xml version="1.0" ?>,跟標準的XML頭部相比缺少了類似encoding=UTF-8這樣的編碼聲明。于是懷疑正是由于這一點導致SAX或者DOM解析器把本不是UTF-8的字符編碼當作UTF-8來處理,于是導致了亂碼和異常。經(jīng)過google搜索證實當使用hl=zh-cn時返回的是GBK編碼的XML,并且有許多用到這個API的php代碼都做了GBK->UTF-8的轉(zhuǎn)換處理。

問題到了這里其實就很簡單了,既然是GBK編碼SAX和DOM默認當UTF-8來處理,并且我們不可能去更改GOOGLE的Servlet讓他返回一個在XML頭部帶encoding=GBK的XML。那么我們只有兩個辦法,要嘛就把返回的XML從GBK編碼轉(zhuǎn)碼到UTF-8,要嘛就讓SAX和DOM解析器把XML當GBK來處理。
雖然是不同的平臺,但也有相通的地方啊~~雖然找到了問題所在,但是解決方法可不那么簡單了,搜索了很久都說wp7不支持GBK編碼,找了幾個轉(zhuǎn)碼的方法也運行不了,MSDN上說只支持utf8和utf16。就要放棄了,已經(jīng)在考慮天氣預報也就那幾個數(shù)據(jù),自己寫個判斷晴天多云的用中文顯示算了。這時候群里的朋友給了一個類,能夠

找了幾個方法都會將中文和無效字符一起去掉,并最后找到了一個C#去除xml無效字符的方法:

1
2
3
4
5
public string CleanInvalidXmlChars(string text)
{
    string re = @"[^\x0D\x20-\xD7FF\xE000-\xFFFD\x10000-x10FFFF\u4e00-\u9fa5]";
    return System.Text.RegularExpressions.Regex.Replace(text, re, "");
}
最終成功傳入中文xml數(shù)據(jù),程序運行正常!

QQ截圖20110816234905

另外在調(diào)試程序的過程中偶爾不定時的會出現(xiàn)xml解析錯誤的情況,xml解析方法已經(jīng)寫好了本該不會出錯,經(jīng)過排查發(fā)現(xiàn)是google的問題,下面的xml是我在同一時間獲取的兩個不同城市的數(shù)據(jù),廣州的xml文件一切正常,貴陽xml文件中框注的內(nèi)容里conditong的data屬性缺失了,相應的icon的data屬性也沒了,因此解析出錯。這個問題不定時的出現(xiàn),現(xiàn)在僅僅是實現(xiàn)了中文讀取,今后需要在程序中加入相應的錯誤檢測代碼,否則解析出錯程序就會自動退出了。

QQ截圖20110816235953QQ截圖20110816235926

這次編寫程序?qū)ξ业挠绊懞苌羁?,看似很簡單的一個應用卻引出了那么多的問題,水很深啊水很深。。。不過最后成功了,非常開心,也增強了我的自信,遇到困難需要自己動手去查去學不管能不能解決問題最終都是肯定能有所收獲的。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多