1 回答
TA贡献1821条经验 获得超6个赞
你的内部RequestYouTubeAPI ASyncTask有这个错误代码:
} catch (IOException e) {
e.printStackTrace();
return null;
}
然后onPostExecute你有以下内容:
@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();
}
}
}
因此,如果您收到错误,return null并且onPostExecute收到响应, null则不会执行任何操作。
所以这个地方可能会出现错误,因此会出现空白片段。
在修复此问题之前,您可以证明这种情况正在发生,如下所示:
@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();
}
}
}
您可以通过两种方式解决此问题:
将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();
}
}
希望有所帮助,代码中可能还有其他错误,但如果 API、Json、授权、互联网等存在问题,则可能会发生这种情况。
添加回答
举报