一直以來都是用Eclipse,終於有機會用Android studio。

Android studio的範例採用了OMDb API(http://www.omdbapi.com)提供的API,當輸入電影名稱時與年份後,可以得知該電影在IMDB的狀況。

目前輸入的電影名稱只能是英文;另外,若不輸入完整且正確的名稱將會找不到該電影。

首先是進行宣告

HttpClient client;
HttpGet get;
HttpResponse response;
String _url = "http://www.omdbapi.com/?";
String result;
StringBuilder stringBuf;
HttpEntity resEntity;

這次的範例偷懶,沒有對輸入的數據進行查驗,而是直接丟給server處理。(反正沒有的東西就是沒有)

在此要注意一點Android5.0開始,為防止main thread被http的服務占用,所以會要求另開thread執行。

也因此在按下button後,會新增一個thread,接著把字串排列成OMDB需要的格式,然後丟到server上。

當回傳值不是null的話,會parse回傳字串,最後更新UI。

new Thread(new Runnable() {
    @Override
        public void run() {
            try {
                stringBuf = new StringBuilder(_url);
                stringBuf.append("t=" + URLEncoder.encode(editText_title.getText().toString(), "UTF-8") + "&");
                stringBuf.append("y=" + URLEncoder.encode(editText_year.getText().toString(), "UTF-8") + "&");
                stringBuf.append("plot=short&r=json&tomatoes=true");
                get = new HttpGet(stringBuf.toString());
                response = client.execute(get);
                resEntity = response.getEntity();
                if (resEntity != null) {
                    result = EntityUtils.toString(resEntity);
                    JSONObject jsonResponse = new JSONObject(result);
                    basedInformation(jsonResponse);
                    stringBuf.setLength(0);
                    updateInfo.sendEmptyMessage(MSG_Showing);
                } else
                    updateInfo.sendEmptyMessage(MSG_Error);
                } catch (IOException | JSONException e) {
                    e.printStackTrace();
           }
      }
}).start();

由於server回傳的格式是json,所以可以很輕易的把資料parse出來,底下是一部份的例子:

infoTitle = jsonResponse.getString("Title");
infoYear = jsonResponse.getString("Year");
infoRated = jsonResponse.getString("Rated");

更新UI方面我就不敘述了,基本上就做做苦工而已,完整sample可以於這裡下載

若你覺得OMDb API幫了你很大的忙,請捐獻金額給API開發者聊表心意。

最後是成果圖,首先是少一個冒號就找不到資料。

findimdb_1.png

把冒號加回去,送出完整名字就有資料了。

findimdb_2.png

 前陣子的冰雪奇緣。

findimdb_3.png

就算是老一點的片,只要有資料就找得到。

findimdb_4.png  

當沒有海報時,會載入預設的圖片。

findimdb_5.png

arrow
arrow
    文章標籤
    Android Http Get
    全站熱搜

    scarletdream 發表在 痞客邦 留言(0) 人氣()