LastFM user.getTopArtists (парсинг URL)

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
Аватара пользователя
WOLVERINE
Сообщения: 8
Зарегистрирован: 28 ноя 2012, 15:13
Откуда: Минск
Контактная информация:

LastFM user.getTopArtists (парсинг URL)

Сообщение WOLVERINE » 18 дек 2012, 09:43

Доброго времени суток.
Необходимо реализовать список ТОП исполнителей на сетке (GridView).

http://www.lastfm.ru/api/show/user.getTopArtists
вот ссылка на апи

подскажите, плз, как выдирать из ссылки нужные мне данные и отображать их на экране (пример ссылки)
должно получиться что-то типа этого:
Изображение

решения не прошу, буду очень рад любым ссылкам - желательно на русском, но и оригинал подойдет

ЗЫ API Key: 111da332f52d0a640e20cb9e53f80884
если надо

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение rezak90 » 18 дек 2012, 10:41

ну так это ж xml, взял парсер и погнал =)
R.id.team
Политика на форуме запрещена

Аватара пользователя
WOLVERINE
Сообщения: 8
Зарегистрирован: 28 ноя 2012, 15:13
Откуда: Минск
Контактная информация:

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение WOLVERINE » 18 дек 2012, 10:50

rezak90 писал(а):ну так это ж xml, взял парсер и погнал =)
возможно все действительно так просто, но я начал изучать ведройд совсем недавно и знаний, как таковых, нету :(

хотя вроде нашел пару нормальных факов, буду сейчас разбираться

Аватара пользователя
Finch
Сообщения: 439
Зарегистрирован: 16 июл 2012, 21:37

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение Finch » 18 дек 2012, 20:58

тут не в ведроиде дело, парсеры есть везде)
вот тебе урок http://startandroid.ru/uroki/vse-uroki- ... m-xml.html
изучай =)
CEO of a company R.id.team

Аватара пользователя
WOLVERINE
Сообщения: 8
Зарегистрирован: 28 ноя 2012, 15:13
Откуда: Минск
Контактная информация:

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение WOLVERINE » 19 дек 2012, 17:09

вроде как сделал парсинг хмл, вот теперь возника вопрос как это все запихнуть в GridView

ParserTopArtists.java

Код: Выделить всё

package com.example.lastfmtask;

import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import android.app.Activity;
import android.sax.Element;
import android.sax.EndElementListener;
import android.sax.EndTextElementListener;
import android.sax.RootElement;
import android.util.Xml;

public class ParserTopArtists extends XmlItems {

	protected InputStream getInputStream() {
		URL feedUrl = null;
		try {
			feedUrl = new URL(getUrl());
		} catch (MalformedURLException e) {
			// TODO: handle exception
			e.printStackTrace();
		}

		try {
			return feedUrl.openConnection().getInputStream();
		} catch (IOException e) {
			// TODO: handle exception
			throw new RuntimeException(e);
		}
	}

	public List<XmlItems> parse() {
		final XmlItems currentXml = new XmlItems();
		final List<XmlItems> messages = new ArrayList<XmlItems>();
		RootElement root = new RootElement("lfm");
		Element topartists = root.getChild("topartists");
		Element artist = topartists.getChild("artist");
		artist.setEndElementListener(new EndElementListener() {

			@Override
			public void end() {
				// TODO Auto-generated method stub
				messages.add(currentXml.copy());
			}
		});
		artist.getChild("name").setEndTextElementListener(new EndTextElementListener() {
			
			@Override
			public void end(String body) {
				// TODO Auto-generated method stub
				currentXml.setName(body);
			}
		});
		artist.getChild("image").setEndTextElementListener(new EndTextElementListener() {
			
			@Override
			public void end(String body) {
				// TODO Auto-generated method stub
				currentXml.setImage(body);
			}
		});
		try {
			Xml.parse(this.getInputStream(), Xml.Encoding.UTF_8, root.getContentHandler());
		} catch (Exception e) {
			// TODO: handle exception
			throw new RuntimeException(e);
		}
		return messages;
	}
}
TopartistsActivity.java

Код: Выделить всё

package com.example.lastfmtask;

import java.util.ArrayList;
import java.util.List;

import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.GridView;
import android.app.ListActivity;

public class TopartistsActivity extends ListActivity {

	private ParserTopArtists parser;
	private List<XmlItems> messages;
	
	GridView gridView;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_topartists);
		parser = new ParserTopArtists();
		messages = parser.parse();
		List<String> artists = new ArrayList<String>(messages.size());
		for (XmlItems msg : messages) {
			artists.add(msg.getName());
		}
		gridView = (GridView) findViewById(R.id.gridView);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.activity_topartists, artists);
		gridView.setAdapter(adapter);
	}

}
XmlItems.java

Код: Выделить всё

package com.example.lastfmtask;

import java.net.MalformedURLException;
import java.net.URL;

import android.app.Activity;

public class XmlItems extends Activity{
	private String name;
	private String image;
	private String user;
	private String apiKey;
	private String url;

	public void setUrl(String Url) {
		this.url = "http://ws.audioscrobbler.com/2.0/?method=user.gettopartists&user="
				+ getUser() + "&api_key=" + getApiKey();
	}

	public void setApiKey(String apiKey) {
		this.apiKey = "111da332f52d0a640e20cb9e53f80884";
	}

	public void setUser(String user) {
		this.user = getIntent().getExtras().getString("username");
	}

	public void setImage(String image) {
		this.image = image;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getImage() {
		return image;
	}

	public String getName() {
		return name;
	}

	public String getUser() {
		return user;
	}

	public String getApiKey() {
		return apiKey;
	}

	public String getUrl() {
		return url;
	}
	
	public XmlItems copy() {
		XmlItems copy = new XmlItems();
		copy.image = image;
		copy.name = name;
		return copy;
	}
}
понимаю, что проблема в том, что требуется ListView

подскажите что и где изменить, что бы это можно было запихнуть в нужный мне GridView

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение rezak90 » 19 дек 2012, 18:35

Я бы сделал это в обычном ListView, зачем использовать грид не пойму. Написал адаптер, засунул ему аррейлист и всё чики-пики =)
R.id.team
Политика на форуме запрещена

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение KamiSempai » 19 дек 2012, 19:04

rezak90 писал(а):Я бы сделал это в обычном ListView, зачем использовать грид не пойму. Написал адаптер, засунул ему аррейлист и всё чики-пики =)
А мне кажется, что с GridView будет красивее.
Лично я не вижу особой разницы по сложности реализации через ListView или через GridView.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение rezak90 » 19 дек 2012, 19:33

та и я не вижу особой разницы, просто мне всегда удобней почему то использовать листвью
R.id.team
Политика на форуме запрещена

Аватара пользователя
WOLVERINE
Сообщения: 8
Зарегистрирован: 28 ноя 2012, 15:13
Откуда: Минск
Контактная информация:

Re: LastFM user.getTopArtists (парсинг URL)

Сообщение WOLVERINE » 20 дек 2012, 08:03

rezak90 писал(а):Я бы сделал это в обычном ListView, зачем использовать грид не пойму. Написал адаптер, засунул ему аррейлист и всё чики-пики =)
ТЗ требует грид и еще кучу чего еще))

Ответить