【发布时间】:2014-12-31 02:34:11
【问题描述】:
我正在尝试操作 JSONArray,rawJArr,(取自 Reddit API),并从每个对象获取 url 和位图(取自 gfycat “API”)以创建 ArrayList (@987654322 @) 的 Highlight 实例将被转换为包含图片、简短描述和 gfycat 链接的 CardView。
try {
int count = 0;
int highlightMax;
Bitmap bitmap = null;
Highlight curHighlight;
myJSON = new JSONObject(rawJSON);
curJSON = myJSON.getJSONObject("data");
rawJArr = curJSON.getJSONArray("children");
String strHighlightNo = mySPrefs.getString("pref_highlightNo", "notFound");
if(strHighlightNo.equals("notFound")) {
Log.w("FT", "shared pref not found");
return null;
}
highlightMax = Integer.parseInt(strHighlightNo);
Log.w("Arr Length", Integer.toString(rawJArr.length()));
Log.w("Highlight No", Integer.toString(highlightMax));
for(int i=0; i < rawJArr.length(); i++) {
Log.w("Count", Integer.toString(count));
Log.w("I", Integer.toString(i));
if(count == highlightMax) {
Log.w("FT", "Breakpoint reached!");
break;
}
curJSON = rawJArr.getJSONObject(i).getJSONObject("data");
String url = curJSON.getString("url");
String[] parts = url.split("//");
String imageUrl = "http://thumbs." + parts[1] + "-thumb100.jpg";
try {
bitmap = BitmapFactory.decodeStream((InputStream) new URL(imageUrl).getContent());
} catch (MalformedURLException e) {
e.printStackTrace();
}
// if there is no available picture, then don't include one in the Highlight
if(bitmap == null) {
Log.w("FT", "Null bitmap");
curHighlight = new Highlight(curJSON.getString("title"), url, null);
listing.add(curHighlight);
count++;
} else {
Log.w("FT", "Bitmap Available");
curHighlight = new Highlight(curJSON.getString("title"), url, bitmap);
listing.add(curHighlight);
count++;
}
}
} catch(JSONException e) {
e.printStackTrace();
return listing;
}
但是,我的 for 循环终止得太早了。我正在使用的当前 JSONArray 的长度为 25,并且我指定了 15 的 pref_highlightNo,但我的 for 循环在 6 次迭代后终止。
我在 for 循环中的 Log.w 测试都记录了相同的计数(计数:1,整数:1 - 计数:6,整数:6)。
我很难理解为什么我的循环会终止:没有堆栈跟踪打印到我的控制台,而且我的应用程序没有崩溃。
知道发生了什么吗?
【问题讨论】:
-
你用过调试器吗? rawJarr.length() 的值是多少
-
@yts - 25,我在进入 for 循环之前记录了它
-
继续调试。在每次迭代中检查 count 和 highlightmax 的值。不要只记录。使用调试器会给你一步一步的分析。