Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Чтение/запись xml файла 
V
    Опции темы
WildChild
  Дата 31.3.2006, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 24.8.2005
Где: Российская Федера ция

Репутация: нет
Всего: нет



1. Нужно, чтобы при появлении англ. слова и его перевода кнопка Next не пропадала. Чтобы увидев текущее слово, можно было перейти к следующему.
2. В любом случае приложение доходит до конца xml файла и соответсвенно прекращает свою работа. Как сделать чтобы такого не происходило?
3. Можно ли в xml файл записывать данные? Ну например, чтобы можно было изменить атрибут тэга, который отвечает за статус слова.

Само приложение:
Код

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.MIDlet;
import org.kxml2.io.KXmlParser;
import org.xmlpull.v1.*;
import javax.microedition.lcdui.*;
import java.lang.*;
import java.io.*;
import java.util.*;

public class MobileXmlParser extends MIDlet implements CommandListener {
  private KXmlParser parser = new KXmlParser();
  private InputStreamReader reader = new InputStreamReader(this.getClass().getResourceAsStream("/data.xml"));
  // класс InputStreamReader используется для чтения символов из байтовых потоков
  private boolean doJob = true;
  private int event;
  private String name;
  private Form fm;
  private Display dsp;
  private Command exitMidlet = new Command("Exit", Command.EXIT, 0);
  private Command next = new Command("Next", Command.OK, 1);

  public MobileXmlParser() {
    dsp = Display.getDisplay(this);
  }
  
  public void parser() {
      int n = 0;
      Random r = new Random();
      fm = new Form("kXML");
    try {
      parser.setInput(reader); //назначим парсеру источник данных
    } catch (XmlPullParserException e) {
      System.out.println("Не удалось связать парсер с потоком данных");
    }
      while (doJob) {
        n = (int)(10 * r.nextDouble());// получаем число от 0 до 10.
      try {
        event = parser.next(); //переместим курсор на следующий элемент документа
        name = parser.getName(); //получим имя этого элемента
        
        if (event == KXmlParser.END_DOCUMENT) {
          doJob = false;
          break;
        }
        
        if ((event == KXmlParser.START_TAG) && (name.startsWith("trunk"))
            && (parser.getAttributeValue(0).equals(java.lang.Integer.toString(n)))) {
          //System.out.println(name + ":" + parser.getAttributeValue(0));
          event = parser.nextTag();
          name = parser.getName();
            if ((event == KXmlParser.START_TAG) && (name.startsWith("branch"))) {
                System.out.println("I'm if-branch");
          System.out.print(n + "=>     " + /*name + */":" + parser.getAttributeValue(0) + "-");
          System.out.println(parser.getAttributeValue(1));
          fm.append(parser.getAttributeValue(0) + "\n" + parser.getAttributeValue(1));
          dsp = Display.getDisplay(this);
          dsp.setCurrent(fm);
          doJob = false;
          reader.close();
            }
            } 
        
      } catch (XmlPullParserException e) {
        System.out.println("Во время парсинга с парсером случилось что-то нехорошее");
      } catch (IOException e) {
        System.out.println("Во время парсинга парсер потерял связь с источником данных");
      }
   }
  }
  public void startApp() {
      fm = new Form("kXML");
      fm.addCommand(exitMidlet);
      fm.addCommand(next);
      fm.setCommandListener(this);
      dsp.setCurrent(fm);
  }
  public void pauseApp() {  }

  public void destroyApp(boolean unconditional) {  }
  
  public void commandAction(Command c, Displayable s) {
      if (c == exitMidlet) {
          destroyApp(false);
          notifyDestroyed();
      }
      if (c == next) {
          parser();
      }
  }
}

И xml файл:
Код

<?xml version="1.0" standalone="yes"?>
<root>
    <trunk id="0">
        <branch eng="mother" rus="мама">
        </branch>
    </trunk>
    <trunk id="1">
        <branch eng="bad" rus="плохой">
        </branch>
    </trunk>
    <trunk id="2">
        <branch eng="live" rus="жить">
        </branch>
    </trunk>
    <trunk id="3">
        <branch eng="way" rus="путь">
        </branch>
    </trunk>
    <trunk id="4">
        <branch eng="time" rus="время">
        </branch>
    </trunk>
</root>


Спасибо!

Это сообщение отредактировал(а) WildChild - 1.4.2006, 11:45
--------------------
Don't give up without even trying
PM MAIL   Вверх
redrick
Дата 1.4.2006, 20:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 547
Регистрация: 7.1.2004
Где: Москва

Репутация: 1
Всего: 5



Цитата(WildChild @ 31.3.2006, 21:34 Найти цитируемый пост)
1. Нужно, чтобы при появлении англ. слова и его перевода кнопка Next не пропадала. Чтобы увидев текущее слово, можно было перейти к следующему.

в методе parser() ты создаешь новый инстанс fm = new Form("kXML"); - это новая формочка, не та, в которую ты добавил кнопку в startApp(). Решение:
1) удали сторку
Код

fm = new Form("kXML");

2) перед
Код

fm.append(parser.getAttributeValue(0) + "\n" + parser.getAttributeValue(1));

вставь
fm.deleteAll();

Цитата(WildChild @ 31.3.2006, 21:34 Найти цитируемый пост)
2. В любом случае приложение доходит до конца xml файла и соответсвенно прекращает свою работа. Как сделать чтобы такого не происходило?

кода не напишу, но идея то проста - проверять не конец ли файла при каждом доступе. Если конец - читать с начала
Цитата(WildChild @ 31.3.2006, 21:34 Найти цитируемый пост)
3. Можно ли в xml файл записывать данные? Ну например, чтобы можно было изменить атрибут тэга, который отвечает за статус слова.

ну вот не знаю - посмотри доки kxml, но или может ктото знающий ответит


--------------------
Имею Мнение Хрен Оспоришь   
PM MAIL ICQ   Вверх
WildChild
Дата 1.4.2006, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 24.8.2005
Где: Российская Федера ция

Репутация: нет
Всего: нет



Цитата

в методе parser() ты создаешь новый инстанс fm = new Form("kXML"); - это новая формочка, не та, в которую ты добавил кнопку в startApp(). Решение:
1) удали сторку

Да-да, лишняя она там. Только сегодня заметил.

Спасибо за предлжения, попробую! smile
--------------------
Don't give up without even trying
PM MAIL   Вверх
WildChild
Дата 2.4.2006, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 24.8.2005
Где: Российская Федера ция

Репутация: нет
Всего: нет



Цитата

кода не напишу, но идея то проста - проверять не конец ли файла при каждом доступе. Если конец - читать с начала

Скорее, лучше InputStreamReader.reset(); при нажатии на Next.

Осталось разобраться с записью в xml файл...
--------------------
Don't give up without even trying
PM MAIL   Вверх
Dancer
Дата 3.4.2006, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



если у тебя xml файл не в файловой системе телефона (а это именно так, исходя из
Цитата(WildChild @ 31.3.2006, 21:34 Найти цитируемый пост)
private InputStreamReader reader = new InputStreamReader(this.getClass().getResourceAsStream("/data.xml"));
,) то как ты сюда сможешь что либо добавлять в момент работы мидлета?
Ну, даже не знаю - чего и предложить .... можно завести таблицу в RMS ID:STATUS, и так вот её поддерживать, но это не есть хороший выход. Так же не забывай чистить RMS когда уже не используешь какие-то слова (а так же наверное при старте мидлета)



--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
Brodyaga
Дата 4.4.2008, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 599
Регистрация: 19.1.2008

Репутация: 2
Всего: 2



Цитата

Скорее, лучше InputStreamReader.reset(); при нажатии на Next.

Осталось разобраться с записью в xml файл...


Так ты разобрался с записью в xml файл? Или вообще ктонить знает как с помощью kXML писать в файл??
PM MAIL   Вверх
Dummy
  Дата 5.5.2008, 14:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 263
Регистрация: 21.5.2007

Репутация: 7
Всего: 19



Здесь, например, гляньте: http://xmlpull.org/v1/download/unpacked/doc/quick_write.html.
 
KXml - это как раз реализация XmlPull. Только в нашем случае вместо такого кода:

Код

XmlSerializer serializer = factory.newSerializer();


можно написать просто:

Код

XmlSerializer serializer = new KXmlSerializer();


Ну, и дальше по тексту. Устанавливаем OutputStream и можем писать куда угодно, хоть в сеть, если политика безопасности нам позволит smile 


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.