Android Rss Изображение Проблема - PullRequest
2 голосов
/ 28 ноября 2010

Привет всем Я относительно новичок в разработке Android и создаю RSS Reader для новостного сайта.У меня проблема в том, что сайт с RSS-фидом, из которого я хочу получать изображения, имеет тип "imageТо, что я сделал для кода на Android, это... 2 класса ... RssItem и RssItem Displayer

public class RssItem {

private String title;
private String description;
private Date pubDate;
private String link;
private static ImageView image;

public RssItem(String title, String description,ImageView image, Date pubDate, String link) {
    this.title = title;
    this.description = description;
    RssItem.image = image;
    this.pubDate = pubDate;
    this.link = link;
}

public String getTitle() {
    return title;
}

public void setTitle(String title) {
    this.title = title;
}

public String getDescription() {
    return description;
}

public void setDescription(String description) {
    this.description = description;
}
public ImageView getImage(ImageView image) {
      return this.image = image;
}     
public void setImage(ImageView image) {
          this.image = image;     
}
public Date getPubDate() {
    return pubDate;
}

public void setPubDate(Date pubDate) {
    this.pubDate = pubDate;
}

public String getLink() {
    return link;
}

public void setLink(String link) {
    this.link = link;
}

@Override
public String toString() {

    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd - hh:mm:ss");

    String result = getTitle() + "   ( " + sdf.format(this.getPubDate()) + " )";
    return result;
}

public static ArrayList<RssItem> getRssItems(String feedUrl) {

    ArrayList<RssItem> rssItems = new ArrayList<RssItem>();

    try {
        //open an URL connection make GET to the server and 
        //take xml RSS data
        URL url = new URL(feedUrl);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
            InputStream is = conn.getInputStream();

            //DocumentBuilderFactory, DocumentBuilder are used for 
            //xml parsing
            DocumentBuilderFactory dbf = DocumentBuilderFactory
                    .newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();

            //using db (Document Builder) parse xml data and assign
            //it to Element
            Document document = db.parse(is);
            Element element = document.getDocumentElement();

            //take rss nodes to NodeList
            NodeList nodeList = element.getElementsByTagName("item");

            if (nodeList.getLength() > 0) {
                for (int i = 0; i < nodeList.getLength(); i++) {

                    //take each entry (corresponds to <item></item> tags in 
                    //xml data

                    Element entry = (Element) nodeList.item(i);

                    Element _titleE = (Element) entry.getElementsByTagName(
                            "title").item(0);
                    Element _descriptionE = (Element) entry
                            .getElementsByTagName("description").item(0);
                    Element _imageE = (Element) entry
                            .getElementsByTagName("image").item(0);
                    Element _pubDateE = (Element) entry
                            .getElementsByTagName("pubDate").item(0);
                    Element _linkE = (Element) entry.getElementsByTagName(
                            "link").item(0);

                    String _title = _titleE.getFirstChild().getNodeValue();
                    String _description = _descriptionE.getFirstChild().getNodeValue();

                     // ImageView image = (ImageView)findViewbyId(R.id.MyImage);
                     // Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(feedUrl).getContent());
                     // image.setImageBitmap(bitmap); 
                    //} catch (MalformedURLException e) {

                    /*try {
                          //where imageUrl is what you pulled out from the rss feed
                          Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(feedUrl).getContent());
                          image.setImageBitmap(bitmap); 
                        } catch (MalformedURLException e) {
                         //log exception here
                        } catch (IOException e) {
                          //log exception here
                        }

                    */

                    Date _pubDate = new Date(_pubDateE.getFirstChild().getNodeValue());
                    String _link = _linkE.getFirstChild().getNodeValue();

                    //create RssItemObject and add it to the ArrayList
                    RssItem rssItem = new RssItem(_title, _description, image,
                            _pubDate, _link);

                    rssItems.add(rssItem);
                }
            }

        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return rssItems;
}      

но я не знаю, как поставить элемент изображения src

Я такжесоздать изображение, которое будет отображаться на макете xml

В другом классе, который показывает средство отображения элементов RSS У меня есть

public class RssItemDisplayer extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.rss_item_displayer);

    RssItem selectedRssItem = com.AndroidRSSReader.AndroidRSSReader.selectedRssItem;
    //Bundle extras = getIntent().getExtras();
    TextView titleTv = (TextView)findViewById(R.id.titleTextView);  
    TextView contentTv = (TextView)findViewById(R.id.contentTextView);  
    ImageView image=(ImageView)findViewById(R.id.MyImage);  

    String title = "";
    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd - hh:mm:ss");
    title = "\n" + selectedRssItem.getTitle() + "   ( "
     + sdf.format(selectedRssItem.getPubDate()) + " )\n\n";

    String content = "";
    content += selectedRssItem.getDescription() + "\n"
            + selectedRssItem.getLink();

    titleTv.setText(title);
    contentTv.setText(content);

    image=selectedRssItem.getImage(image);
    try {
          String feedUrl = null;
        //where imageUrl is what you pulled out from the rss feed
          Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(feedUrl).getContent());
          image.setImageBitmap(bitmap); 
        } catch (MalformedURLException e) {
         //log exception here
        } catch (IOException e) {
          //log exception here
        }

logcat , предоставленный мнепредупреждает в строке rss item, что растровое изображение получено в коде

11-29 00:13:44.593: WARN/System.err(2997): java.net.MalformedURLException: Protocol not found: 
11-29 00:13:44.593: WARN/System.err(2997):     at java.net.URL.<init>(URL.java:275)
11-29 00:13:44.593: WARN/System.err(2997):     at java.net.URL.<init>(URL.java:159)
11-29 00:13:44.593: WARN/System.err(2997):     at com.AndroidRSSReader.RssItem.getRssItems(RssItem.java:92)
11-29 00:13:44.593: WARN/System.err(2997):     at com.AndroidRSSReader.AndroidRSSReader.refressRssList(AndroidRSSReader.java:301)
11-29 00:13:44.593: WARN/System.err(2997):     at com.AndroidRSSReader.AndroidRSSReader.onCreate(AndroidRSSReader.java:229)
11-29 00:13:44.593: WARN/System.err(2997):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
11-29 00:13:44.593: WARN/System.err(2997):     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
11-29 00:13:44.593: WARN/System.err(2997):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
11-29 00:13:44.593: WARN/System.err(2997):     at android.app.ActivityThread.access$2300(ActivityThread.java:125)
11-29 00:13:44.603: WARN/System.err(2997):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
11-29 00:13:44.603: WARN/System.err(2997):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-29 00:13:44.613: WARN/System.err(2997):     at android.os.Looper.loop(Looper.java:123)
11-29 00:13:44.613: WARN/System.err(2997):     at android.app.ActivityThread.main(ActivityThread.java:4627)
11-29 00:13:44.613: WARN/System.err(2997):     at java.lang.reflect.Method.invokeNative(Native Method)
11-29 00:13:44.613: WARN/System.err(2997):     at java.lang.reflect.Method.invoke(Method.java:521)
11-29 00:13:44.613: WARN/System.err(2997):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:876)
11-29 00:13:44.613: WARN/System.err(2997):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:634)
11-29 00:13:44.613: WARN/System.err(2997):     at dalvik.system.NativeStart.main(Native Method)

Что я должен вставить в эти две вещи, чтобы получить изображение и особенно в классе rss item В любом случае, если кто-то может помочь, ябуду благодарен

1 Ответ

3 голосов
/ 28 ноября 2010

Ваш класс RssItem не должен иметь следующее:

private static ImageView image;

Замените это на:

private String imageUrl;

В вашем методе getRssItems используйте _imageE, чтобы получить значение дляimageUrl.Затем используйте imageUrl, как описано ниже.

ImageView будет отображать только изображения, хранящиеся локально на вашем устройстве, поэтому установка его на удаленный URL не будет работать.Одно решение можно найти здесь: Android, создайте изображение по URL-адресу, равному изображению ImageView Итак, вам нужно изменить значение с:

titleTv.setText(title);
image.setImageURI(uri);
contentTv.setText(content);

на:

titleTv.setText(title);
contentTv.setText(content);
try {
  //where imageUrl is what you pulled out from the rss feed
  Bitmap bitmap = BitmapFactory.decodeStream((InputStream)new URL(imageUrl).getContent());
  image.setImageBitmap(bitmap); 
} catch (MalformedURLException e) {
 //log exception here
} catch (IOException e) {
  //log exception here
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...