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
相关产品推荐
相关产品推荐

