凌雪
2018-10-24
来源 :网络
阅读 1449
评论 0
摘要:本文将带你了解Android应用开发之Android学习-搜索Flickr网站实现方法,希望本文对大家学Android有所帮助。
本文将带你了解Android应用开发之Android学习-搜索Flickr网站实现方法,希望本文对大家学Android有所帮助。
今天的任务为搜索Flickr网站,代码如下:
FlickrFetchr.java:
package com.bignerdranch.android.photogallery; import android.net.Uri;import android.util.Log; import org.json.JSONArray;import org.json.JSONException;import org.json.JSONObject; import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.net.HttpURLConnection;import java.net.URL;import java.util.ArrayList;import java.util.List; public class FlickrFetchr { private static final String TAG = "FlickrFetchr"; private static final String API_KEY = "REPLACE_ME_WITH_A_REAL_KEY"; private static final String FETCH_RECENTS_METHOD = "flickr.photos.getRecent"; private static final String SEARCH_METHOD = "flickr.photos.search"; private static final Uri ENDPOINT = Uri .parse("https://api.flickr.com/services/rest/") .buildUpon() .appendQueryParameter("api_key", API_KEY) .appendQueryParameter("format", "json") .appendQueryParameter("nojsoncallback", "1") .appendQueryParameter("extras", "url_s") .build(); public byte[] getUrlBytes(String urlSpec) throws IOException { URL url = new URL(urlSpec); HttpURLConnection connection = (HttpURLConnection)url.openConnection(); try { ByteArrayOutputStream out = new ByteArrayOutputStream(); InputStream in = connection.getInputStream(); if (connection.getResponseCode() != HttpURLConnection.HTTP_OK) { throw new IOException(connection.getResponseMessage() + ": with " + urlSpec); } int bytesRead = 0; byte[] buffer = new byte[1024]; while ((bytesRead = in.read(buffer)) > 0) { out.write(buffer, 0, bytesRead); } out.close(); return out.toByteArray(); } finally { connection.disconnect(); } } public String getUrlString(String urlSpec) throws IOException { return new String(getUrlBytes(urlSpec)); } public List<galleryitem> fetchRecentPhotos() { String url = buildUrl(FETCH_RECENTS_METHOD, null); return downloadGalleryItems(url); } public List<galleryitem> searchPhotos(String query) { String url = buildUrl(SEARCH_METHOD, query); return downloadGalleryItems(url); } private List<galleryitem> downloadGalleryItems(String url) { List<galleryitem> items = new ArrayList<>(); try { String jsonString = getUrlString(url); Log.i(TAG, "Received JSON: " + jsonString); JSONObject jsonBody = new JSONObject(jsonString); parseItems(items, jsonBody); } catch (IOException ioe) { Log.e(TAG, "Failed to fetch items", ioe); } catch (JSONException je) { Log.e(TAG, "Failed to parse JSON", je); } return items; } private String buildUrl(String method, String query) { Uri.Builder uriBuilder = ENDPOINT.buildUpon() .appendQueryParameter("method", method); if (method.equals(SEARCH_METHOD)) { uriBuilder.appendQueryParameter("text", query); } return uriBuilder.build().toString(); } private void parseItems(List<galleryitem> items, JSONObject jsonBody) throws IOException, JSONException { JSONObject photosJsonObject = jsonBody.getJSONObject("photos"); JSONArray photoJsonArray = photosJsonObject.getJSONArray("photo"); for (int i = 0; i < photoJsonArray.length(); i++) { JSONObject photoJsonObject = photoJsonArray.getJSONObject(i); GalleryItem item = new GalleryItem(); item.setId(photoJsonObject.getString("id")); item.setCaption(photoJsonObject.getString("title")); if (!photoJsonObject.has("url_s")) { continue; } item.setUrl(photoJsonObject.getString("url_s")); items.add(item); } } }</galleryitem></galleryitem></galleryitem></galleryitem></galleryitem>
本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之Android频道!
喜欢 | 0
不喜欢 | 0
您输入的评论内容中包含违禁敏感词
我知道了

请输入正确的手机号码
请输入正确的验证码
您今天的短信下发次数太多了,明天再试试吧!
我们会在第一时间安排职业规划师联系您!
您也可以联系我们的职业规划师咨询:
版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
沪公网安备 31011502005948号