編輯:關於Android編程
剛剛寫了篇博客,提了下在使用XUtils時遇到的一個問題Android Xutils框架HttpUtil Get請求緩存問題 ,既然已經提起來這個問題,那我想了下,就把之前使用Xutils時遇到的幾個小問題整理一下。
一、 HttpUtil Get請求緩存問題
關於Xtuls框架的Http模塊的get請求方法,會有緩存問題——即進行get請求時,在緩存規定的時間內,如果發送同樣的請求url,則不會再次請服務器發送請求,而是直接返回上次請求的結果。 之前寫了一篇博客已經介紹的很詳細了,可查看《Android Xutils框架HttpUtil Get請求緩存問題》。
二、 如何直接在HTTP請求時發送一個字符串
首先,我想先說下,如何使用Xutils的框架HTTP模塊向服務器發送數據,這裡必須介紹一個API:com.lidroid.xutils.http.RequestParams,我不貼出該類的源碼了,且把方法給大家看下:
從以上方法可以看出,它提供的幾個方法非常方便,不僅可以直接使用addQueryStringParameter(String name, String value)方法,將參數以key-value的形式放入其中,(一般用於get請求),還有addBodyParameter(String name, String value) ,講參數放在Http的body中;還有addHeader(String name, String value)等方法,允許添加HTTP請求的Header,可謂是方便之極。
下面有人會問了,如果我不以key-value的形式上傳參數,而是想直接把一串字符(JSON串,普通字符串等)傳到服務器中,那該怎麼辦呢?
有辦法!
1. 對於Get請求,如果要直接上傳一串字符,可以直接把它連接在url上。
比如我要請求的地址是: http://www.imooc.com/api/teacher,需要上傳的參數是“{id: 1,learner: 12312}”,那我可以直接把他拼接在url上,變成 http://www.imooc.com/api/teacher?{id: 1,learner: 12312}
服務器按照約定,再進行相應的處理就好了。當然對於上述的請求,字符串中有特殊字符,我們要求對其進行URL編碼: URLEncoder.encode(),之後才可以上傳。
2. 對於Post請求,使用requestParams.setBodyEntity(HttpEntity bodyEntity)
如果我們上傳的是字符串,使用HttpEntity的子類實例StringEntity即可: requestParams.setBodyEntity(new StringEntity())。
三、 java.net.URISyntaxException的解決辦法
前些天做項目,使用Xutils Http get請求時,當我發送的一串字符串中含有特殊字符,就會發生這種情況。查找了一些網上資料,說地址中涉及了特殊字符,如‘|’‘&’等。所以不能直接用String代替URI來訪問。必須采用%0xXX方式來替代特殊字符。但這種辦法不直觀。所以只能先把String轉成URL,再能過URL生成URI的方法來解決問題。代碼如下:
URL url = new URL(strUrl); URI uri = new URI(url.getProtocol(), url.getHost(), url.getPath(), url.getQuery(), null); HttpClient client = new DefaultHttpClient(); HttpGet httpget = new HttpGet(uri);
public URIBuilder(final String uri) { try { digestURI(new URI(uri)); } catch (URISyntaxException e) { LogUtils.e(e.getMessage(), e); } }簡要修改下源碼:
public URIBuilder(String uri) { try { URL e = new URL(uri); this.digestURI(new URI(e.getProtocol(), e.getHost(), e.getPath(), e.getQuery(), (String)null)); } catch (Exception var3) { LogUtils.e(var3.getMessage(), var3); } }這就好了,重新編譯xutil.jar文件,可以放心使用了。
當然了,之前說了,對於get請求的特殊字符,我們可以采用URLEncoder.encode()進行特殊字符的編碼來解決。 可是,我試了下,用這個方法並沒能解決我的問題,所以我才采取了修改源碼的方法。有興趣的同學可以再次嘗試下。
點九圖片的拉伸區域不難理解,顯示內容區域是怎樣的?.9 ,是andriod平台的應用軟件開發裡的一種特殊的圖片形式,文件擴展名為:.9.png智能手機中有自動橫屏的功能,
在android開發中只要是列表式風格界面我們幾乎都需要用到List來存放數據,在數量很少的List的話幾乎任何一種循環遍歷方式整體性能都無差別,但是當我們遇到數據量稍大
本書也正式的進入尾聲了,在android的世界了,不同的軟件,硬件信息就像一個國家的經濟水平,軍事水平,不同的配置參數,代表著一個android帝國的強弱,
需求:模擬android系統應用設置中飛行模式的開啟與關閉,並記住設置的狀態 布局文件:fragment_main.xml 資源文件s