检查后,对象仍然为空

时间:2013-08-15 04:12:21

标签: android arrays json

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

3 个答案:

答案 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()];