Zápisky pro seminář programování na GJS.

Zpracování XML dokumentu

Chceme dokončit aplikaci, která čte písničku z webu api.chartlyrics.com. Stahování umíme od minula (podrobnosti zde, ještě se budou hodit), teď je ale potřeba se poprat s formátem XML, ve kterém jsme dostali data.

1. Seznamte se s XML

Smyslem prvního úkolu je zprovoznit XML parser. Abychom to měli co nejjednodušší, uložíme si dokument přímo do kódu programu. Ukáže se vždycky ten samý text písničky a ani nebude potřeba nic stahovat.

Android

Vytvořte novou aplikaci s jedním tlačítkem. Kód třídy MainActivity nahraďte následujícím kódem a pak jen nastavte, aby se po kliknutí na tlačítko spustila funkce onClick. Když spustíte kód v debuggeru, měl by postupně vypsat, s čím se v XML dokumentu setkává.

class MainActivity : Activity() {

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
  }

  fun onClick(v: View) {
    val xml = "<GetLyricResult>" +
        "<TrackId>0</TrackId>" +
        "<LyricChecksum>0332066a53653ae00870e67e78475488</LyricChecksum>" +
        "<LyricId>4617</LyricId>" +
        "<LyricSong>I Like to Move It</LyricSong>" +
        "<LyricArtist>Reel 2 Real</LyricArtist>" +
        "<LyricUrl>http://www.chartlyrics.com/bFIUC5mNrEecPg1irReN1Q/I+Like+to+Move+It.aspx</LyricUrl>" +
        "<LyricCovertArtUrl>http://ec1.images-amazon.com/images/P/B002G1X37S.02.MZZZZZZZ.jpg</LyricCovertArtUrl>" +
        "<LyricRank>9</LyricRank>" +
        "<LyricCorrectUrl>http://www.chartlyrics.com/app/correct.aspx?lid=NAA2ADEANwA=</LyricCorrectUrl>" +
        "<Lyric>I like to move it, move it\n" +
        "I like to move it, move it\n" +
        "I like to move it, move it\n" +
        "I like to move it, move it\n" +
        "Ya like to (Move it)\n" +
        "\n" +
        "I like to move it, move it\n" +
        "I like to move it, move it\n" +
        "I like to move it, move it\n" +
        "Ya like to (Move it)</Lyric></GetLyricResult>"
    val parser: XmlPullParser = Xml.newPullParser()
    parser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false)
    parser.setInput(StringReader(xml))
    var eventType = parser.getEventType()
    while (eventType != XmlPullParser.END_DOCUMENT) {
      if (eventType == XmlPullParser.START_TAG) {
        System.out.println("Start tag " + parser.getName())
      } else if (eventType == XmlPullParser.TEXT) {
        System.out.println("Text " + parser.getText())
      }
      eventType = parser.next()
    }
  }

}

V případě zájmu si můžete pročíst podrobnosti na developer.android.com.

iOS

Použijeme XMLParser, kterému nastavíme XMLParserDelegate vymyšlený podle našich potřeb. Funkční ukázka by měla být zde na forums.developer.android.com, ale v hodině ji musíme doladit.

Především tam budeme muset nakopírovat ten XML dokument z ukázky pro Android, abychom měli co číst.

2. Vypište jen text písně

Upravte kód tak, aby vypsal jen obsah tagu Lyric, tedy deset řádků.

Kód bude fungovat vlastně pořád stejně. Místo toho, aby každý tag vypisoval, se ale jen podívá na jeho typ, a pokud to zrovna není "Lyric", tak neudělá nic.

3. Stahujte text za běhu

Vykopírujte kód z minula, aby program nejdřív stáhnul XML dokument z webu a teprv ten stažený dokument zpracoval.

4. Doplňte uživatelské rozhraní

Výsledek vypište do textového pole, aby byl vidět na telefonu.

Pak doplňte políčko na zadání jména interpreta a skladby, aby šlo vyhledávat i jiné věci než tuhle odpornou diskárnu. Tím je aplikace hotová.