1 回答

TA貢獻(xiàn)1821條經(jīng)驗(yàn) 獲得超6個(gè)贊
你的內(nèi)部RequestYouTubeAPI ASyncTask有這個(gè)錯(cuò)誤代碼:
} catch (IOException e) {
e.printStackTrace();
return null;
}
然后onPostExecute你有以下內(nèi)容:
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
if(response != null){
try {
JSONObject jsonObject = new JSONObject(response);
Log.e("response", jsonObject.toString());
mListData = parseVideoListFromResponse(jsonObject);
initList(mListData);
//adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
因此,如果您收到錯(cuò)誤,return null并且onPostExecute收到響應(yīng), null則不會(huì)執(zhí)行任何操作。
所以這個(gè)地方可能會(huì)出現(xiàn)錯(cuò)誤,因此會(huì)出現(xiàn)空白片段。
在修復(fù)此問(wèn)題之前,您可以證明這種情況正在發(fā)生,如下所示:
@Override
protected void onPostExecute(String response) {
super.onPostExecute(response);
if(response == null){
Log.e("TUT", "We did not get a response, not updating the UI.");
} else {
try {
JSONObject jsonObject = new JSONObject(response);
Log.e("response", jsonObject.toString());
mListData = parseVideoListFromResponse(jsonObject);
initList(mListData);
//adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
}
您可以通過(guò)兩種方式解決此問(wèn)題:
將doInBackground捕獲更改為:
} catch (IOException e) {
Log.e("TUT", "error", e);
// Change this JSON to match what the parse expects, so you can show an error on the UI
return "{\"yourJson\":\"error!\"}";
}
或者onPostExecute:
if(response == null){
List errorList = new ArrayList();
// Change this data model to show an error case to the UI
errorList.add(new YouTubeDataModel("Error");
mListData = errorList;
initList(mListData);
} else {
try {
JSONObject jsonObject = new JSONObject(response);
Log.e("response", jsonObject.toString());
mListData = parseVideoListFromResponse(jsonObject);
initList(mListData);
//adapter.notifyDataSetChanged();
} catch (JSONException e) {
e.printStackTrace();
}
}
希望有所幫助,代碼中可能還有其他錯(cuò)誤,但如果 API、Json、授權(quán)、互聯(lián)網(wǎng)等存在問(wèn)題,則可能會(huì)發(fā)生這種情況。
添加回答
舉報(bào)