2010-11-28 5 views
2

Bonjour à tous Je suis relativement nouveau dans le développement Android et je suis en train de créer un lecteur RSS pour un site d'actualités. Le problème que j'ai est ce site avec le flux rss dont je veux obtenir des images est d'un type "< img src =" http ...... "" Ce que j'ai fait pour le code sur android est ... 2 classes ... RssItem et RssItem DisplayerAndroid Rss Image Problème

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; 
}  

mais je ne sais pas comment mettre l'élément d'image src

Je crée aussi un imageview qui montrera sur la mise en page xml

Dans l'autre classe r qui montre RSS article Displayer Je

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 
     } 

le logcat m'a donné warnins à la ligne de l'élément rss que bitmap est d'obtenir dans le code

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) 

Que dois-je mettre en ces deux choses à grub l'image et surtout à rss classe d'objet Quoi qu'il en soit, si quelqu'un peut aider je serai reconnaissant

+0

Il est pas clair ce que vous entendez par « mais je ne sais pas comment mettre la élément d'image src ". Pouvez-vous s'il vous plaît décrire cela mieux? De plus, certaines de vos questions n'ont pas été formatées en code alors qu'elles devraient l'être, ce qui les rend difficiles à lire. – elevine

+0

le flux rss a les images dans ce format DroidAjax

+0

Je comprends cela.Quel est le problème? Ma conjecture est que vous voulez prendre cette URL de l'image et l'afficher dans un android – elevine

Répondre

3

Votre classe RssItem ne doit pas avoir e les éléments suivants:

private static ImageView image; 

remplacer par:

private String imageUrl; 

Dans votre méthode getRssItems, utilisez _imageE pour obtenir la valeur pour imageUrl. Ensuite, utilisez imageUrl comme décrit ci-dessous. Un ImageView n'affichera que les images stockées localement sur votre appareil. Par conséquent, le paramétrage de l'URL à distance ne fonctionnera pas. Une solution peut être trouvée ici: Android, Make an image at a URL equal to ImageView's image Alors, vous voulez changer de:

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 
} 
+1

J'ai essayé de mettre votre réponse à mon code, mais il changer bitmap ... et Je ne suis pas sûr de savoir comment mettre en œuvre it.I suppose dans la partie qui dit nouvelle URL (imageUrl) je mets feedUrl .... – DroidAjax

+0

J'ai ajouté quelques exemples de code dans ma première réponse – elevine

+0

oui mais c'est pour la classe RSS Diplayer que je ne pense pas qu'il est juste dans l'autre classe si un élément RSS est sans erreur, bien que dans le logcat je un avertissement ... dans la classe Rss Displayer où l'image affichera effectivement dans la mise en page (Imageview) l'URL doit mettre à nouveau .... – DroidAjax