Все работает если отдельно получать имя и ссылку на картинку, а вот если вместе, то возник косяк, приложение вылетает после запуска, вот такое XML сообщение:
Код: Выделить всё
<item>
<lnk>http://home-android.ru/content/games/290/1362551973778339B.jpg</lnk>
<name>Subway Surfers</name>
</item>
<item>
<lnk>http://home-android.ru/content/games/903/13694796854695B.png</lnk>
<name>Ultimate Stick Fight</name>
</item>
Код: Выделить всё
package com.t.test;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.XmlResourceParser;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AsyncDownloader downloader = new AsyncDownloader();
downloader.execute();
}
public void rec(String lnk, String name)
{
LinearLayout layout = (LinearLayout) findViewById(R.id.lin1);
TextView txt = new TextView(this);
txt.setText(name);
layout.addView(txt);
ImageView image = new ImageView(this);
layout.addView(image);
new DownloadImageTask(image).execute(lnk);
}
class AsyncDownloader extends AsyncTask<Object, String, Integer>{
@Override
protected Integer doInBackground(Object... params) {
XmlPullParser recivedData = null;
try {
recivedData = tryDownloadingXmlData();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
int recordsFound = 0;
try {
recordsFound = tryParsingXmlData(recivedData);
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return recordsFound;
}
private XmlPullParser tryDownloadingXmlData() throws IOException {
try{
URL xmlUrl = new URL("http://home-android.ru/android/main");
XmlPullParser recivedData = XmlPullParserFactory.newInstance().newPullParser();
recivedData.setInput(xmlUrl.openStream(),null);
return recivedData;
}
catch(XmlPullParserException e){ }
catch(IOException e) { }
return null;
}
private int tryParsingXmlData(XmlPullParser recivedData) throws XmlPullParserException, IOException {
if(recivedData != null)
{
processRecivedData(recivedData);
}
return 0;
}
private void processRecivedData(XmlPullParser xmlData) throws XmlPullParserException, IOException {
int eventType = -1;
int recordsFound = 0;
String lnk="";
String name="";
while(eventType!=XmlResourceParser.END_DOCUMENT)
{
String tagName=xmlData.getName();
switch(eventType)
{
case XmlResourceParser.START_TAG:
if(xmlData.getText()!=null && tagName.equals("item"))
{
continue;
}
break;
case XmlResourceParser.TEXT:
if (tagName.equals("lnk")) {
lnk=xmlData.getText();
}
if (tagName.equals("name")) {
name = xmlData.getText();
}
break;
case XmlResourceParser.END_TAG:
if(tagName.equals("item"))
{
recordsFound++;
publishProgress(lnk,name);
}
break;
}
eventType=xmlData.next();
if(recordsFound==0){
publishProgress();
}
}
}
@Override
protected void onPostExecute(Integer result) {
super.onPostExecute(result);
// код
}
@Override
protected void onProgressUpdate(String... values){
if(values.length>1)
{
String lnk = values[0];
String name = values[1];
Main.this.rec(lnk,name);
}
super.onProgressUpdate(values);
}
}
class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImage;
DownloadImageTask(ImageView bmImage) {
this.bmImage = bmImage;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error", e.getMessage());
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
bmImage.setImageBitmap(result);
}
}
}