我检查以确保在设置之前对象不是Null但它仍然返回Null。
代码:
JSONObject json = jparse.getJSONFromUrl(URL);
JSONObject c;
JSONObject d;
try {
pictures = json.getJSONArray(TAG_PICTURES);
c = pictures.getJSONObject(2);
gallery = c.getJSONArray(TAG_GALLERY);
Log.d(tag, "after pictures");
} catch (JSONException e) {
e.printStackTrace();
}
try {
//get every instance of thumbPath here
//looping through all of Gallery
for(int z = 0; z < gallery.length(); z++){
thumbpaths = new String[gallery.length()];
captions = new String[gallery.length()];
d = gallery.getJSONObject(z);
String thumbpath = d.getString(TAG_THUMBPATHS);
String Captions = d.getString(TAG_CAPTIONS);
Log.d(tag, "Captions:" + Captions);
Log.d(tag, "Path:" + thumbpath);
if(thumbpath != null && Captions != null){
thumbpaths[z] = thumbpath;
captions[z] = Captions;
}else{
Log.d(tag, "thumbpath or Caption null");
}
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
if(thumbpaths != null){
for(int i = 0; i < thumbpaths.length; i++){
Log.d(tag,"thumbPaths:" + thumbpaths[i]);
}
bitmaps = getImagesFromPaths(thumbpaths);
}
你可以看到上面我正在解析一个JSON对象并从中获取路径列表。这些路径需要传递给getImagesFromPaths(paths)
它永远不会到达并崩溃应用程序,因为它在除了最后一条路径之外的所有内容上都返回null。
我在设置数组之前检查if(thumbpath != null && Captions != null)
,我不明白它为什么会放置它而不是移动到我的日志。
如何让这个拥有所有路径,以便我可以发送它们以从URL接收?
答案 0 :(得分:2)
您是否意识到您的拇指路径和字幕数组已初始化为其大小,并且具有完整的空值?因此,如果您不使用非空值设置索引(z),它们仍将为null。你是在每次循环迭代时都这样做的!
// All values in the array have been initialized to null
thumbpaths = new String[gallery.length()];
captions = new String[gallery.length()];
答案 1 :(得分:2)
我会添加评论,但我没有声誉。
我发现了一个问题:
此...
for(int z = 0; z < gallery.length(); z++) {
thumbpaths = new String[gallery.length()];
captions = new String[gallery.length()];
...
}
应该......
thumbpaths = new String[gallery.length()];
captions = new String[gallery.length()];
for(int z = 0; z < gallery.length(); z++) {
...
}
答案 2 :(得分:1)
if(thumbpath != null && Captions != null)
您正在同时检查两者是否为空。你的陈述是说它们都不能等于null,也许Captions
不是空的,但thumbpath
是(反之亦然[不太可能]),你的陈述仍然是真的。
您需要单独检查:
if(thumbpath != null) {
if (Captions != null){
thumbpaths[z] = thumbpath;
captions[z] = Captions;
}
} else { /* Do other stuff... */ }
编辑:另外,正如@Iahsrah所说,你重新初始化你的两个数组以使for循环的每次迭代都为空,这就是为什么只有最后一个包含任何非空值(它没有机会被初始化了。)
您需要将这些放在for循环之外:
thumbpaths = new String[gallery.length()];
captions = new String[gallery.length()];