Синтаксическая ошибка на токене «}», но я действительно не могу ее найти

1

Сейчас я изучаю Android, и я пишу некоторые простые коды в соответствии с книгой.

я создаю проект андроида с именем Chapter03_ResourceActivity, а затем создаю test.xml в res/xml/folder, содержимое выглядит следующим образом:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <customer name = "first_name" age = "1" email = "[email protected]" />
    <customer name = "second_name" age = "2" email = "[email protected]" />
</resources>

и введите коды в Chapter03_ResourceActivity.java (src/com.app.MainActivity/Chapter03_ResourceActivity.java) следующим образом:

package com.app.MainActivity;

import org.xmlpull.v1.XmlPullParserException;

import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class Chapter03_ResourceActivity extends Activity {
    /** Called when the activity is first created. */

    private Button myButton;
    private TextView myTextView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button myButton = (Button)findViewById(R.id.btn_xml);
        final TextView myTextView = (TextView)findViewById(R.id.text_xml);

        myButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
            StringBuilder sb = new StringBuilder();
            XmlResourceParser xrp = getResources().getXml(R.xml.test);
            int counter = 0;
            try {
                while(xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
                    if(xrp.getEventType() == XmlResourceParser.START_TAG) {
                        String name = xrp.getName();
                        if(name.equals("customer")) {
                            counter ++;
                            sb.append(counter + " Customer" + "\n");
                            sb.append(xrp.getAttributeValue(0) + "\n");
                            sb.append(xrp.getAttributeValue(1) + "\n");
                            sb.append(xrp.getAttributeValue(2) + "\n\n");
                        } 
                        xrp.next();
                    }
                } 
            myTextView.setText(sb.toString());    <<--Here Eclipse mark an error. 
                catch(XmlPullParserException e) {
                    e.printStackTrace();
                }
            }   
            }
        });           <<--Here Eclipse mark another error.
    }
}

В коде отмечены две ошибки. я попытался решить это сам, но простите мою скуку, я не могу ее найти. Я много раз подсчитывал количество "{" и "}" и просто считаю, что они равны. Может, я действительно ошибся? Или что-то, что я не сделал, сделал эту ошибку? Любая помощь оценивается.

  • 1
    вам нужен еще один, чтобы закрыть свой блок try, а затем избавиться от одного после блока catch
  • 1
    Вы должны очистить / отформатировать / исправить отступ файла (все в меню Source в Eclipse). Тогда подобные структурные проблемы часто видны сразу.
Показать ещё 2 комментария
Теги:

3 ответа

3
Лучший ответ
catch(XmlPullParserException e) {
    e.printStackTrace();
}

должно быть:

} catch(XmlPullParserException e) {
    e.printStackTrace();

Это не количество, вызывающее у вас горе, просто размещение. На данный момент ваш catch находится внутри блока try а не сразу после него.

  • 0
    Благодарю. Ошибка исчезла.
1

Линия, которая затмевает отметку как erro, вне любого блока кода...

Добавьте закрывающий скручивающий элемент перед уловом и переместите эту линию таким образом:

public class Chapter03_ResourceActivity extends Activity {
    /** Called when the activity is first created. */

    private Button myButton;
    private TextView myTextView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Button myButton = (Button)findViewById(R.id.btn_xml);
        final TextView myTextView = (TextView)findViewById(R.id.text_xml);

        myButton.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
            StringBuilder sb = new StringBuilder();
            XmlResourceParser xrp = getResources().getXml(R.xml.test);
            int counter = 0;
            try {
                while(xrp.getEventType() != XmlResourceParser.END_DOCUMENT) {
                    if(xrp.getEventType() == XmlResourceParser.START_TAG) {
                        String name = xrp.getName();
                        if(name.equals("customer")) {
                            counter ++;
                            sb.append(counter + " Customer" + "\n");
                            sb.append(xrp.getAttributeValue(0) + "\n");
                            sb.append(xrp.getAttributeValue(1) + "\n");
                            sb.append(xrp.getAttributeValue(2) + "\n\n");
                        } 
                        xrp.next();
                    }

                } 
                 myTextView.setText(sb.toString());    <<--Now is fine
                } catch(XmlPullParserException e) {
                    e.printStackTrace();
                }
            }   
            }
        });
    }
}
  • 0
    Теперь их больше} чем {, так что это все еще не правильно.
1

Вы начинаете свой блок try с {, но вы никогда не закрываете его с помощью}. Таким образом, вы должны добавить} перед оператором catch.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню