为了账号安全,请及时绑定邮箱和手机立即绑定

如何修复空片段?

如何修复空片段?

慕的地8271018 2024-01-17 20:54:17
我是 Android 开发新手,正在尝试创建自己的应用程序。它应该使用 YouTube 数据 API 显示特定的 YouTube 频道。我从 Android Studio 中的标准底部导航模板开始,并使用 Github 上的以下项目来获取一些启动帮助。https://github.com/stressGC/Remake-YouTube-Android我必须更改一些内容,例如代码中已弃用的 http 调用,以使其与新的 Android APK 一起运行。从我的角度来看,一切似乎都很好:我可以看到 API 内容看起来不错,并且每个标题/描述/发布日期都放置在相应的变量中。日志中也没有错误消息。当我启动模拟器时,应用程序运行良好。但是当我切换到“仪表板”片段(放置代码的地方)时,它是空的。
查看完整描述

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、授权、互联网等存在问题,则可能会发生这种情况。


查看完整回答
反对 回复 2024-01-17
  • 1 回答
  • 0 关注
  • 102 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信