Jawa / Говнокод #19495 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  10. 10
  11. 11
  12. 12
  13. 13
  14. 14
  15. 15
  16. 16
  17. 17
  18. 18
  19. 19
  20. 20
  21. 21
  22. 22
  23. 23
  24. 24
  25. 25
  26. 26
  27. 27
  28. 28
  29. 29
  30. 30
  31. 31
  32. 32
  33. 33
  34. 34
  35. 35
  36. 36
  37. 37
  38. 38
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
public class MainActivity extends ActionBarActivity {
    String rssResult;
    boolean item = false;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        rssResult = "";
        TextView rss = (TextView) findViewById(R.id.rss);
        try {
            URL rssUrl = new URL("http://rfs.ru/rss/news.rss");
            SAXParserFactory factory = SAXParserFactory.newInstance();
            SAXParser saxParser = factory.newSAXParser();
            XMLReader xmlReader = saxParser.getXMLReader();
            RSSHandler rssHandler = new RSSHandler();
            xmlReader.setContentHandler(rssHandler);
            InputSource inputSource = new InputSource(rssUrl.openStream());
            xmlReader.parse(inputSource);
            rss.setText(rssResult);
        } catch (IOException e) {rss.setText(e.getMessage());
        } catch (SAXException e) {rss.setText(e.getMessage());
        } catch (ParserConfigurationException e) {rss.setText(e.getMessage());
        }

    }
    private class RSSHandler extends DefaultHandler {

        public void startElement(String uri, String localName, String qName,
                                 Attributes attrs) throws SAXException {
            if (localName.equals("item"))
                item = true;

            if (!localName.equals("item") && item == true)
                rssResult = rssResult + localName + ": ";

        }

        public void endElement(String namespaceURI, String localName,
                               String qName) throws SAXException {

        }

        public void characters(char[] ch, int start, int length)
                throws SAXException {
            String cdata = new String(ch, start, length);
            if (item == true)
                rssResult = rssResult +(cdata.trim()).replaceAll("\\s+", " ")+"\t";

        }

    }
}

Пытаюсь впихнуть rss'ку в приложение, а оно вылетает сразу после запуска. Ошибка указывает на 18 строку " InputSource inputSource = new InputSource(rssUrl.openStream());". Ошибка java.lang.RuntimeException: Unable to start activity ComponentInfo

Запостил: lancevrot lancevrot, (Updated )

Комментарии (21) RSS

  • У тебя, скорее всего, NetworkInMainThreadException 🙂

    Не знаю, как там устроены эти ридеры, но скорее всего тупо делают синхронный коннект в том же треде, откуда их позвали. А разрабов андроида 4+ заебали индусы, которые лезут в сеть из главного потока, и жалобы пользователей в духе "андроид говно лагучее", поэтому за сеть в главном треде прогу мгновенно карают экцепшеном...
    Ответить
    • Что есть правильно и богоугодно.

      Я бы еще в лабах насильно заставлял делать трудоемкие вычисления в других потоках, а то когда гуи зависает - очень неприятно
      Ответить
      • Предлагаю делать лабы на JS. Клиент-серверная архитектура, однопоточный код для браузера, однопоточный код для сервера, гуй не виснет, все рады.
        Ответить
        • Виснет же к хуям, если какое-то длинное вычисление запустить...

          Или ты предлагаешь чтобы вис сервер, а клиент асихронно ждал, пока он закончит?
          Ответить
          • > Или ты предлагаешь чтобы вис сервер, а клиент асихронно ждал, пока он закончит расчёт?
            Да, именно так.
            Ответить
              • >> однопоточный код для браузера, однопоточный код для сервера
                > Но это уже 2 потока, а не 1 🙂
                Два потока, но код-то однопоточный (магия).
                Ответить
                • Да где ж он однопоточный? Один поток в браузере, второй на сервере.
                  Ответить
                  • Как где? На сервере - однопоточный, на клиенте тоже однопоточный.
                    Весь многопоточный код остался где-то позади в ОС, даже событийная питушня осталась на совести жс-движка.
                    Ответить
                • Кстати, однопоточный но отзывчивый код можно сделать на прерываниях... Единственный тред считает что-то долгое, а обработчики прерываний делают что-то маленькое и быстрое.
                  Ответить
                  • CPS?

                    Можно, но... в реальности его кто то вообще использует?
                    Ответить
                    • Почему CPS? Просто прерывания.

                      А CPS юзает тот же boost::asio. Там всё на этих коллбеках. Ну и нода.жс же, классика коллбечной лапши.
                      Ответить
    • Зафигачил я значит сервис с помощью RoboSpice, делаю всю эту шнягу в отдельном потоке, а ошибка все равно на той же строке.
      Ответить

Добавить комментарий

Из-за тебя ушел bormand, guest!

    А не использовать ли нам bbcode?


    8