我试图操纵JSONArray,rawJArr
,(取自Reddit API),并获取url和位图(取自gfycat" API")每个对象创建一个listing
实例的ArrayList(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,并且我指定了pref_highlightNo
为15,但是我的for循环在6次迭代后终止。
for循环中的Log.w
个测试记录相同的计数(计数:1,整数:1 - 计数:6,整数:6)。
我很难理解我的循环终止的原因:我的控制台上没有打印堆栈跟踪,我的应用程序也没有崩溃。
知道发生了什么事吗?
答案 0 :(得分:0)
原来这个问题特定于我试图创建的最后一个url以获取所需的gfycat - 我没有任何代码来处理链接以http://www
开头的情况。