猿问

如何修复空片段?

我是 Android 开发新手,正在尝试创建自己的应用程序。它应该使用 YouTube 数据 API 显示特定的 YouTube 频道。我从 Android Studio 中的标准底部导航模板开始,并使用 Github 上的以下项目来获取一些启动帮助。https://github.com/stressGC/Remake-YouTube-Android

我必须更改一些内容,例如代码中已弃用的 http 调用,以使其与新的 Android APK 一起运行。从我的角度来看,一切似乎都很好:我可以看到 API 内容看起来不错,并且每个标题/描述/发布日期都放置在相应的变量中。日志中也没有错误消息。当我启动模拟器时,应用程序运行良好。但是当我切换到“仪表板”片段(放置代码的地方)时,它是空的。


慕的地8271018
浏览 104回答 1
1回答

达令说

你的内部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、授权、互联网等存在问题,则可能会发生这种情况。
随时随地看视频慕课网APP

相关分类

Java
我要回答