0

在我的 Android Activity 中,我有以下课程:

class Categoria {
    public String nome;
    public String id;
}

在另一个类中,我有一个遍历数组的循环,并且在该数组的每个条目中都必须提供这两个 Categoria 类的属性。但它返回 null 因为变量在我的 Categoria 类中以 null 开头。循环如下:

ArrayList<Categoria> categorias = null;
int eventType = parser.getEventType();

while(eventType != XmlPullParser.END_DOCUMENT){

    String name = null;

    switch(eventType){

        case XmlPullParser.START_DOCUMENT:
            categorias = new ArrayList<Categoria>();
        break;

        case XmlPullParser.START_TAG:
            name = parser.getName();
            if("categoria".equalsIgnoreCase(name)){
                Categoria catAtual = new Categoria();
            } else if("nome".equalsIgnoreCase(name)){
                catAtual.nome = parser.nextText();
            } else if("id".equalsIgnoreCase(name)){
                catAtual.id = parser.nextText;
            }
        break;

        case XmlPullParser.END_TAG:
            name = parser.getName();
            if(name.equalsIgnoreCase("categoria") && catAtual != null){
                categorias.add(catAtual);
            }
        break;

    }

    eventType = parser.next();

}

快速查看,我可以运行此代码而不会出现更多问题,但 Eclipse 不会让我这样做,因为他在两行中发现并出错。这个:

catAtual.nome = parser.nextText();

和这个:

catAtual.id = parser.nextText();

显示此错误:

catAtual 无法解析为变量

我相信这是因为该对象是在一个案例中创建的,并且正在另一个案例中使用。是否有一种解决方法不会损害我的整个代码?

提前致谢。

4

1 回答 1

1

关于您的错误:

 Categoria catAtual = null;// your fix

while(eventType != XmlPullParser.END_DOCUMENT){

switch(eventType){

    case XmlPullParser.START_DOCUMENT:
        categorias = new ArrayList<Categoria>();
    break;

    case XmlPullParser.START_TAG:
        name = parser.getName();
        if("categoria".equalsIgnoreCase(name)){
            catAtual = new Categoria();
        } else if("nome".equalsIgnoreCase(name) && catAtual != null){
            catAtual.nome = parser.nextText();
        } else if("id".equalsIgnoreCase(name)  && catAtual != null){
            catAtual.id = parser.nextText;
        }
    break;

    case XmlPullParser.END_TAG:
        name = parser.getName();
        if(name.equalsIgnoreCase("categoria") && catAtual != null){
            categorias.add(catAtual);
        }
    break;

}

...

既然你用ifelse if("nome".equalsIgnoreCase(name))不知道你在哪里定义catAtual的。

while在循环之前启动它

顺便说一句,&& catAtual != null向两个语句添加验证if以防止NullPointerException

于 2013-09-18T22:05:45.730 回答