我无法从flickr获取照片

时间:2018-04-12 17:57:44

标签: android android-viewpager flickr

我的FlickrFetcher中有以下代码我不知道问题是log cat继续给我以下错误。

04-12 13:38:49.351 29910-29923 / com.bignerdranch.android.photogallery I / FlickrFetcher:收到JSON:{" stat":"失败",&# 34;代码":100,"消息":"无效的API密钥(密钥格式无效)"} 04-12 13:38:49.351 29910-29923 / com.bignerdranch.android.photogallery E / FlickrFetcher:无法解析JSON:org.json.JSONException:没有照片值

代码如下

public class FlickrFetcher {

    private static final String TAG = "FlickrFetcher";

    private static final String API_KEY = "SECRET_KEY_HERE";

    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> fetchItems() {

        List<GalleryItem> items = new ArrayList<>();

        try {
            String url = Uri.parse("https://api.flickr.com/services/rest/")
                    .buildUpon()
                    .appendQueryParameter("method", "flickr.photos.getRecent")
                    .appendQueryParameter("api_key", API_KEY)
                    .appendQueryParameter("format", "json")
                    .appendQueryParameter("nojsoncallback", "1")
                    .appendQueryParameter("extras", "url_s")
                    .build().toString();

            String jsonString = null;

            jsonString = getUrlString(url);
            Log.i(TAG, "Received JSON: " + jsonString);
            JSONObject jsonBody = new JSONObject(jsonString);
            parseItems(items, jsonBody);
        } catch (IOException e) {
            Log.e(TAG, "Failed to fetch: " + e);
        } catch (JSONException e) {
            Log.e(TAG, "Failed to parse JSON: " + e);
        }

        return items;
    }

    public void parseItems(List<GalleryItem> items, JSONObject jsonBody) throws JSONException {

        JSONObject photosJSONObject = jsonBody.getJSONObject("photos");
        JSONArray photosJSONArray = photosJSONObject.getJSONArray("photo");

        for (int i = 0; i < photosJSONArray.length(); i++) {
            JSONObject photoJSONObject = photosJSONArray.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);
        }
    }

可以任何一个expaline如何修改此错误提前谢谢

1 个答案:

答案 0 :(得分:0)

从错误消息中可以看出:"message":"Invalid API Key (Key has invalid format)"

您没有正确输入API密钥。

private static final String API_KEY = "SECRET_KEY_HERE";

您的问题就在这里。您没有用实际的密钥替换SECRET_KEY_HERE。你必须这样做,呃!

您可以从此链接获取密钥:

https://www.flickr.com/services/api/misc.api_keys.html

  

API密钥   要使用Flickr API,您需要拥有应用程序密钥。我们使用它来跟踪API使用情况。

     

目前,仅在事先允许商业使用API   允许。用于商业用途的API密钥请求是   由工作人员审查。如果您的项目是个人的,艺术的,免费的或   否则非商业请不要求商业钥匙。如果   您的项目是商业性的,请提供足够的细节以提供帮助   我们决定。谢谢!

     

立即在线申请您的密钥,请确保包含一个   简要说明你打算如何使用它。

显然你必须要求一个API密钥,所以这样做!