0

我在设置对象之前检查以确保对象不是 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 接收?

4

3 回答 3

2

您确实意识到您的拇指路径和标题数组已初始化为充满空值的大小,对吗?因此,如果您不使用非空值设置索引 (z),它们仍然为空。您在每次循环迭代中都这样做!

// All values in the array have been initialized to null
thumbpaths = new String[gallery.length()];
captions = new String[gallery.length()];
于 2013-08-15T04:22:18.300 回答
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++) {
    ...
}
于 2013-08-15T04:25:13.463 回答
1
if(thumbpath != null && Captions != null)

您正在同时检查两者是否为空。您的陈述是说它们都不能等于null,也许Captions不为null,但是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()];
于 2013-08-15T04:17:53.377 回答