Bom dia a todos…
Estou implementando um leitor de feeds de noticias, trago as noticias certinho, mais não consigo trazer as imagens(fotos).
Alguem pode me ajudar.
Aguardo retorno.
Att.
Juliana Corá.
Bom dia a todos…
Estou implementando um leitor de feeds de noticias, trago as noticias certinho, mais não consigo trazer as imagens(fotos).
Alguem pode me ajudar.
Aguardo retorno.
Att.
Juliana Corá.
aqui no trabalho fizeram algo assim…
eu nao mexi e nao sei como funciona… vc tem o caminho dessas imagens? uma URL?
Eu tenho esse codigo aqui para baixar as imagens do servidor.
private String downloadImg(String src) {
try {
URL url = new URL(src);
String fileName = url.getFile().replaceAll("/", "");
if (!fileName.endsWith("png"))
fileName = fileName.substring(0, fileName.lastIndexOf('.'))
+ ".png";
File file = new File(IMAGES_PATH + fileName);
if (file.exists())
return IMAGES_PATH + fileName;
InputStream stream = url.openStream();
Bitmap result = BitmapFactory.decodeStream(stream);
stream.close();
if (result == null)
return null;
file.createNewFile();
FileOutputStream fos = new FileOutputStream(file);
result.compress(CompressFormat.PNG, 10, fos);
fos.flush();
fos.close();
return IMAGES_PATH + fileName;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
E ele ainda salva o arquivo em algum local e retorna a URL do arquivo.
hehehehe.
Era o que eu ia propor. se você tem a url pode abrir um stream pra imagem. Porisso perguntei.
Aproveitando… Marky, você saber dizer que protocolo de rede uma conexão assim usa pra poder se conectar e sair baixando a imagem?
talvez com um sniffer de pra ver, ne? Mas você tem ideia de qual protocolo é usado?
Olha o que eu fiz…
no main.xml criei - uma ImageView
as classes…
Essa ultima classe seria o meu problema…de como pegar a imagem…
Caso esteja errada me corrija por favor…
Me desculpa as classes estão um pouco picadas…hehehe
Oii Juh,
eu tentei rodar seu projeto aqui no meu eclipse, ao que me parece esta faltando algumas coisas.
Aqui reclama da falta da Classe RSSItem, existe ela?
Passe o codigo inteiro para que eu possa testar aqui.
Abraço!
Pessoal, tentei…tentei mais ainda não consegui…me de uma luz por favor!!!
Tentar explicar novamente…
Estou lendo um XML de um site de noticias, trago o title certinho, o caminho da imagem (description) trago tambem, só que não consigo mostrar a imagem na
aplicação.
Abaixo segue a classe.
public class MainActivity extends Activity
{
private final String CGR_FEED_URL = "http://globoesporte.globo.com/dynamo/semantica/editorias/plantao/feed.rss";
private ListView listview_episodes;
private ImageView imagemView;
private ArrayList<String> episode_titles;
private ArrayList<String> episode_urlImage;
Episode episode = new Episode();
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listview_episodes = (ListView) findViewById(R.id.listview_episodes);
episode_titles = new ArrayList<String>();
episode_urlImage = new ArrayList<String>();
downloadEpisodes(CGR_FEED_URL);
}
private void downloadEpisodes(String Url)
{
Log.d("CGRParser", "Downloading Feed");
new DownloadEpisodes().execute(Url);
}
private class DownloadEpisodes extends AsyncTask<String, Integer, ArrayList<Episode>>
{
@Override
protected ArrayList<Episode> doInBackground(String... url)
{
//Download and Parse Feed
XmlFeedParser parser = new XmlFeedParser();
ArrayList<Episode> episodes = new ArrayList<Episode>();
episodes = parser.parse(url[0]);
return episodes;
}
@Override
protected void onPostExecute(ArrayList<Episode> result)
{
Log.d("CGRParser", "Feed Download Complete");
displayEpisodes(result);
}
}
private void displayEpisodes(ArrayList<Episode> episodes)
{
Log.d("CGRParser", "Displaying Episode Titles To User");
ArrayList<String> episode_titles = new ArrayList<String>();
ArrayList<String> episode_urlImage = new ArrayList<String>();
for (Episode episode : episodes)
{
//aqui ta certinho, esta trazendo o title e caminho da imagem.
Log.d("CGRParser", "Episode Titles: " + episode.getTitle());
Log.d("CGRParser", "Episode Titles: " + episode.getImagemUrl());
episode_titles.add(episode.getTitle());
episode_urlImage.add(episode.getImagemUrl());
//abaixo seria meu problema, esta dando erro na aplicação.....
URL url = new URL(episode.getImagemUrl());
InputStream in = url.openStream();
Bitmap bitmap = BitmapFactory.decodeStream(in);
ImageView imgView = (ImageView) findViewById(R.id.imagem);
Drawable d = new BitmapDrawable(bitmap);
imgView.setImageDrawable(d);
}
this.episode_titles = episode_titles;
this.episode_urlImage = episode_urlImage;
//abaixo é a hora que lista os titles na tela, mais gostaria que listasse junto as imagens vindo do xml
ListAdapter adapter = new ArrayAdapter<String>(this, R.layout.main, R.id.title, episode_titles);
//ListAdapter adapter = new ArrayAdapter<String>(this, R.layout.main, R.id.title, episode_titles, R.id.imagem, episode_urlImage);
listview_episodes.setAdapter(adapter);
}
}
Espero que alguem me ajude, aguardo retorno…
Abraços.
Qual está sendo exatamente o problema??
Não entendi se é baixar a imagem ou exibi-la. Pelo código parece que é a exibição.
Se for esse o caso, já tentou usar um ListActivity ao invés do Activity e um SimpleAdapter ao invés do ArrayAdapter?
Pode ser o caso também de esquecer dos “adapter” e montar a lista “na mão” mesmo. Não é tão complicado. Este trecho de código faz isso:
[code]ViewGroup layout = (ViewGroup)findViewById(R.id.list);
layout.removeAllViews();
for (String[] str : msg) {
View view = View.inflate(this, R.layout.warning_viewer_msg, null);
((TextView)view.findViewById(R.id.msgDate)).setText(str[1]);
((TextView)view.findViewById(R.id.msgText)).setText(str[2]);
try {
@SuppressWarnings("rawtypes")
Class clazz = Class.forName(pref.getString(str[0] + ".class", "java.lang.String"));
AbstractBaseUploader uploader = (AbstractBaseUploader)clazz.newInstance();
((ImageView)view.findViewById(R.id.image)).setImageResource(uploader.getNotificationErrorIcon());
} catch (ClassNotFoundException ignored) {
} catch (Exception ignored) {
}
layout.addView(view);
}[/code]
O “R.id.list” é um LinearLayout. Ele monta uma lista contendo 3 colunas: a primeira é uma imagem, e as outras duas são textos.
Juh, eu consegui implementar em meu projeto um leitor de RSS mas eu nao precisava buscar imagens.
Lembro que este artigo me ajudou bastante, tente abstrair algo de lá: http://www.ibm.com/developerworks/br/opensource/library/x-android/
Bom dia Pessoal…
Meu problema foi solucionado, então vou postar caso vocês precisem ok....
Sobre a imagem tive que fazer uma função para buscar na tag <description>, primeiro o .jpg e ir voltando até o http para poder ter a url da imagem.
public void setStringUrl(String StringUrl)
{
int indice = StringUrl.indexOf(".jpg");
if (indice > 0)
{
String p_texto = StringUrl.substring(0, indice);
String URL_IMAGE = ".jpg";
String encontrou = "N";
int achouHTTP=0;
indice = indice -1;
int count = 0;
while(encontrou == "N")
{
count = count + 1;
achouHTTP = -1;
char ind = p_texto.charAt(indice);
achouHTTP = URL_IMAGE.indexOf("http");
if (achouHTTP >= 0)
{
encontrou = "S";
}
else
{
URL_IMAGE = ind+URL_IMAGE;
indice = indice -1;
}
}
this.StringUrl = URL_IMAGE;
}
}
e baixo é onde mostro a imagem e title e data da noticia
public View getView(int position, View convertView, ViewGroup parent)
{
Episode episode = lista.get(position);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.main, null);
TextView textTitle = (TextView) v.findViewById(R.id.title);
textTitle.setText(episode.getTitle());
ImageView imagemView = (ImageView) v.findViewById(R.id.icon);
BitmapFactory.Options bmOptions;
bmOptions = new BitmapFactory.Options();
bmOptions.inSampleSize = 1;
setBmp(LoadImage(episode.getStringUrl() ,bmOptions));
imagemView.setImageBitmap(getBmp());
TextView textDate = (TextView) v.findViewById(R.id.data);
textDate.setText(episode.getDate());
return v;
}
Espero que tenham entendido…
Abraço.