0

私の Android アクティビティ内には、次のクラスがあります。

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

別のクラス内では、配列を介したループがあり、この配列の各エントリで、この 2 つの Categorias クラスのプロパティをフィードする必要があります。しかし、Categoria クラスで変数が null として開始されるため、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 では 2 行でエラーが検出されたため実行できませんでした。これ:

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に両方のステートメントに検証を追加しますifNullPointerException

于 2013-09-18T22:05:45.730 に答える