如何提取"标题"从这个API?

时间:2016-08-25 06:03:10

标签: java android json

这是我在stackoverflow中看到的代码,它使用视频ID从youtube获取单个视频的数据。但是,我似乎无法获得"标题"来自网址。它在我的浏览器中工作,但在我正在开发的android应用程序中,它没有。代码有什么问题?

private class RequestTask extends AsyncTask<String, String, String> {
    // make a request to the specified url
    @Override
    protected String doInBackground(String... uri) {
        HttpClient httpclient = new DefaultHttpClient();
        HttpResponse response;
        String responseString = null;
        try {
            // make a HTTP request
            response = httpclient.execute(new HttpGet(uri[0]));
            StatusLine statusLine = response.getStatusLine();
            if (statusLine.getStatusCode() == HttpStatus.SC_OK) {
                ByteArrayOutputStream out = new ByteArrayOutputStream();
                response.getEntity().writeTo(out);
                out.close();
                responseString = out.toString();
            } else {
                // close connection
                response.getEntity().getContent().close();
                throw new IOException(statusLine.getReasonPhrase());
            }
        } catch (Exception e) {
            Log.d("Test", "Couldn't make a successful request!");
        }
        return responseString;
    }

    @Override
    protected void onPostExecute(String response) {
        super.onPostExecute(response);

        try {
            // convert the String response to a JSON object
            JSONObject jsonResponse = new JSONObject(response);
            Toast.makeText(getActivity(), jsonResponse.getString("title"), Toast.LENGTH_SHORT).show();

            // fetch the array of movies in the response
            JSONArray jArray = jsonResponse.getJSONArray("movies");


        } catch (JSONException e) {
            Log.d("Test", "Couldn't successfully parse the JSON response!");
        }
    }
}

顺便说一句,这是API,

https://www.googleapis.com/youtube/v3/videos?id=P3mAtvs5Elc&key=<INSERT_API_SERVER_KEY_HERE>&fields=items(id,snippet(description,channelId,title,categoryId),statistics)&part=snippet,statistics

1 个答案:

答案 0 :(得分:1)

以下是YOuTube API响应的显示方式:

{
 "kind": "youtube#videoListResponse",
 "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/sDAlsG9NGKfr6v5AlPZKSEZdtqA\"",
 "videos": [
  {
   "id": "7lCDEYXw3mM",
   "kind": "youtube#video",
   "etag": "\"UCBpFjp2h75_b92t44sqraUcyu0/iYynQR8AtacsFUwWmrVaw4Smb_Q\"",
   "snippet": {
    "publishedAt": "2012-06-20T22:45:24.000Z",
    "channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
    "title": "Google I/O 101: Q&A On Using Google APIs",
    "description": "Antonio Fuentes speaks to us and takes questions on working with Google APIs and OAuth 2.0.",
    "thumbnails": {
     "default": {
      "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/default.jpg"
     },
     "medium": {
      "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/mqdefault.jpg"
     },
     "high": {
      "url": "https://i.ytimg.com/vi/7lCDEYXw3mM/hqdefault.jpg"
     }
    },
    "categoryId": "28"
   },
   "contentDetails": {
    "duration": "PT15M51S",
    "aspectRatio": "RATIO_16_9"
   },
   "statistics": {
    "viewCount": "3057",
    "likeCount": "25",
    "dislikeCount": "0",
    "favoriteCount": "17",
    "commentCount": "12"
   },
   "status": {
    "uploadStatus": "STATUS_PROCESSED",
    "privacyStatus": "PRIVACY_PUBLIC"
   }
  }
 ]
}

要在代码下方获取视频标题:

JSONObject responseObject = new JSONObject(response);
JSONArray videosArray = jsonObject.getJSONArray("videos");
JSONObject videoObject = videosArray.getJSONObject(0); //Pointing to first video
JSONObject snippetObject = videoObject.getJSONObject("snippet");
String title = snippetObject.getString("title");