一直以來都是用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開發者聊表心意。
最後是成果圖,首先是少一個冒號就找不到資料。
把冒號加回去,送出完整名字就有資料了。
前陣子的冰雪奇緣。
就算是老一點的片,只要有資料就找得到。
當沒有海報時,會載入預設的圖片。
留言列表