gpt4 book ai didi

java - 加载集成的 youtube channel 视频时出现 JSONException

转载 作者:行者123 更新时间:2023-11-29 20:59:08 25 4
gpt4 key购买 nike

我在我的应用程序中集成了 youtube channel ,但它没有显示所有视频。对于某些 channel ,它只显示很少的视频。如果我将 throw new RuntimeException(e);while捕获 JSONException 应用程序崩溃并显示以下错误-

11-02 20:00:40.868: E/AndroidRuntime(15351): FATAL EXCEPTION: AsyncTask #1
11-02 20:00:40.868: E/AndroidRuntime(15351): java.lang.RuntimeException: An error occured while executing doInBackground()
11-02 20:00:40.868: E/AndroidRuntime(15351): at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-02 20:00:40.868: E/AndroidRuntime(15351): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.lang.Thread.run(Thread.java:856)
11-02 20:00:40.868: E/AndroidRuntime(15351): Caused by: java.lang.RuntimeException: org.json.JSONException: No value for videoId
11-02 20:00:40.868: E/AndroidRuntime(15351): at com.wingnity.jsonparsingtutorial.SoundcloudActivity$JSONAsyncTask.doInBackground(SoundcloudActivity.java:223)
11-02 20:00:40.868: E/AndroidRuntime(15351): at com.wingnity.jsonparsingtutorial.SoundcloudActivity$JSONAsyncTask.doInBackground(SoundcloudActivity.java:1)
11-02 20:00:40.868: E/AndroidRuntime(15351): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-02 20:00:40.868: E/AndroidRuntime(15351): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-02 20:00:40.868: E/AndroidRuntime(15351): ... 5 more
11-02 20:00:40.868: E/AndroidRuntime(15351): Caused by: org.json.JSONException: No value for videoId
11-02 20:00:40.868: E/AndroidRuntime(15351): at org.json.JSONObject.get(JSONObject.java:354)
11-02 20:00:40.868: E/AndroidRuntime(15351): at org.json.JSONObject.getString(JSONObject.java:510)
11-02 20:00:40.868: E/AndroidRuntime(15351): at com.wingnity.jsonparsingtutorial.SoundcloudActivity$JSONAsyncTask.doInBackground(SoundcloudActivity.java:191)
11-02 20:00:40.868: E/AndroidRuntime(15351): ... 8 more
11-02 20:00:40.952: E/AppErrorDialog(348): Failed to get ILowStorageHandle instance
11-02 20:00:41.476: E/WindowManager(15351): Activity com.wingnity.jsonparsingtutorial.SoundcloudActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41929000 that was originally added here
11-02 20:00:41.476: E/WindowManager(15351): android.view.WindowLeaked: Activity com.wingnity.jsonparsingtutorial.SoundcloudActivity has leaked window com.android.internal.policy.impl.PhoneWindow$DecorView@41929000 that was originally added here
11-02 20:00:41.476: E/WindowManager(15351): at android.view.ViewRootImpl.<init>(ViewRootImpl.java:418)
11-02 20:00:41.476: E/WindowManager(15351): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:294)
11-02 20:00:41.476: E/WindowManager(15351): at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:226)

这是我要整合的 channel -

http://www.youtube.com/user/BeingIndianchannel

它只显示最新的三个视频这是代码-

    ArrayList<Channel> actorsList;
//private static String url = "https://www.googleapis.com/youtube/v3/search?key=xyz&channelId=UCdf6i1jTJl0TLzXc1KMDMKA&part=snippet,id&order=date&maxResults=20";
String videoid;
// JSON Node names
private static final String TAG_ITEMS = "items";
private static final String TAG_KIND = "kind";
private static final String TAG_ETAG = "etag";
private static final String TAG_ID = "id";
private static final String TAG_KINDV = "kind";
private static final String TAG_VIDEOID = "videoId";
private static final String TAG_SNIPPET = "snippet";
private static final String TAG_PUBLISHED = "publishedAt";
private static final String TAG_CHANNELID = "channelId";
private static final String TAG_TITLE = "title";
private static final String TAG_DESCRIPTION = "description";
private static final String TAG_THUMBNAILS = "thumbnails";
private static final String TAG_DEFAULT = "default";
private static final String TAG_URL = "url";
private static final String TAG_MEDIUM = "medium";
private static final String TAG_URL2 = "url";
private static final String TAG_HIGH = "high";
private static final String TAG_URL3 = "url";
private static final String TAG_CHANNEL = "channelTitle";
private static final String TAG_BROADCAST = "liveBroadcastContent";
ChannelAdapter adapter;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.youtubevidlist);
actorsList = new ArrayList<Channel>();
new JSONAsyncTask().execute("https://www.googleapis.com/youtube/v3/search?key=xyz&channelId=UChAlpEbfW1y9auiBC08ZwGQ&part=snippet,id&order=date&maxResults=20");
ListView listview = (ListView)findViewById(R.id.list);
adapter = new ChannelAdapter(getApplicationContext(), R.layout.row, actorsList);

listview.setAdapter(adapter);

listview.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long id) {
// TODO Auto-generated method stub

String name = ((TextView) arg1.findViewById(R.id.name_label))
.getText().toString();

Intent in = new Intent(getApplicationContext(),
YoutubeActivity2.class);

in.putExtra("TAG_VIDEOID", name);

startActivity(in);
;
}
});
}


class JSONAsyncTask extends AsyncTask<String, Void, Boolean> {

ProgressDialog dialog;

@Override
protected void onPreExecute()
{
super.onPreExecute();
dialog = new ProgressDialog(SoundcloudActivity.this);
dialog.setMessage("Loading, please wait");
dialog.setTitle("Connecting server");
dialog.show();
dialog.setCancelable(false);
}

@Override
protected Boolean doInBackground(String... urls) {
try {

//------------------>>
HttpGet httppost = new HttpGet(urls[0]);
HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(httppost);

// StatusLine stat = response.getStatusLine();
int status = response.getStatusLine().getStatusCode();

if (status == 200) {
HttpEntity entity = response.getEntity();
String data = EntityUtils.toString(entity);


JSONObject jsono = new JSONObject(data);
JSONArray jarray = jsono.getJSONArray(TAG_ITEMS);

for (int i = 0; i < jarray.length(); i++) {
JSONObject c = jarray.getJSONObject(i);

Channel actor = new Channel();

actor.setKind(c.getString(TAG_KIND));
actor.setEtag(c.getString(TAG_ETAG));
JSONObject id = c.getJSONObject(TAG_ID);
actor.setKind2(id.getString(TAG_KINDV));
actor.setVideoid(id.getString(TAG_VIDEOID));

JSONObject snippet = c.getJSONObject(TAG_SNIPPET);
actor.setPublished(snippet.getString(TAG_PUBLISHED));
actor.setChannelid(snippet.getString(TAG_CHANNELID));
actor.setTitle(snippet.getString(TAG_TITLE));
actor.setDescription(snippet.getString(TAG_DESCRIPTION));
JSONObject thumbnail = snippet.getJSONObject(TAG_THUMBNAILS);
JSONObject defaul = thumbnail.getJSONObject(TAG_DEFAULT);
actor.setUri1(defaul.getString(TAG_URL));
JSONObject medium = thumbnail.getJSONObject(TAG_MEDIUM);
actor.setUri2(medium.getString(TAG_URL2));
JSONObject high = thumbnail.getJSONObject(TAG_HIGH);
actor.setUri3(high.getString(TAG_URL3));
actor.setChannel(snippet.getString(TAG_CHANNEL));
actor.setBroadcast(snippet.getString(TAG_BROADCAST));

actorsList.add(actor);
}
return true;
}

//------------------>>

} catch (ParseException e1) {
e1.printStackTrace();
Log.e("exception","ParseException");
} catch (IOException e) {
e.printStackTrace();
Log.e("exception","IOException");
} catch (JSONException e) {
e.printStackTrace();
throw new RuntimeException(e);

}
return false;
}

protected void onPostExecute(Boolean result) {
dialog.cancel();
adapter.notifyDataSetChanged();



if(result == false)
Toast.makeText(getApplicationContext(), "Unable to fetch data from server", Toast.LENGTH_LONG).show();

}
}






}

最佳答案

 Caused by: org.json.JSONException: No value for videoId

根据 the API :

If the id.type property's value is youtube#video, then this property will be present and its value will contain the ID that YouTube uses to uniquely identify a video that matches the search query.

videoId 是可选值。在调用 JSONObject.getString() 之前,您需要使用 JSONObject.has() 检查它是否存在。

关于java - 加载集成的 youtube channel 视频时出现 JSONException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26701469/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com