You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android开发:ArrayList调用getTitle()报错,无法显示JSON数据标题

解决方法:修复getTitle()无法解析及数据显示问题

咱们一步步拆解你遇到的问题,几个小细节错误导致了当前的报错和数据显示异常:

1. 核心报错根源:调用getTitle()的对象类型错误

在onPostExecute方法里,SearchResults是**ArrayList<ShashaItem>类型的集合**,而不是单个ShashaItem对象。你直接对集合调用getTitle(),集合类本身没有这个方法,所以IDE会提示"无法解析该方法"。

修复代码:
先从集合中取出具体的电影对象,再调用它的getTitle()方法。如果你的API只返回单条电影数据(像示例JSON那样),直接取索引0的元素即可:

@Override
protected void onPostExecute(ArrayList<ShashaItem> SearchResults) {
    if (SearchResults != null && !SearchResults.isEmpty()) {
        // 取出集合里的第一个电影实例
        ShashaItem targetMovie = SearchResults.get(0);
        mSearchResultsTextView.setText(targetMovie.getTitle());
        showJsonDataView();
    } else {
        showErrorMessage();
    }
}

2. 隐藏bug:JSON解析的循环逻辑错误

在JsonShashaDetail的getSimpleMovieStringsFromJson方法中,你的for循环一直取moviesArray.getJSONObject(0)——这会导致不管循环多少次,都只把第一个电影数据添加到集合里。如果API返回多个电影,其他数据会全部丢失。

修复代码:
把固定索引0换成循环变量i,遍历所有电影对象:

for (int i = 0; i < moviesArray.length(); i++) {
    int id;
    String title;
    // 用循环变量i作为索引,遍历数组中的每一个电影
    JSONObject movieObject = moviesArray.getJSONObject(i);
    id = movieObject.getInt(ID);
    title = movieObject.getString(TITLE);
    parsedMovieData.add(new ShashaItem(id, title));
}

3. 无效的空判断逻辑

原来的代码用!SearchResults.equals("")判断集合是否有数据,这完全不对——ArrayList和字符串""永远不会相等,这个判断条件永远为false。应该用集合的isEmpty()方法来判断是否为空,这个修正已经包含在第一个修复点里了。

额外优化小建议

  • 变量名尽量遵循Java规范:比如SearchResults改成searchResults(小驼峰命名),提升代码可读性;
  • 如果API可能返回空的movies数组,建议在解析前先判断数组长度,避免潜在的空指针问题。

把这些修复都应用后,你的代码就能正确获取并显示电影的title字段了。

内容的提问来源于stack exchange,提问作者muklah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:15:47