Autore Topic: Problema list view rss  (Letto 2129 volte)

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Problema list view rss
« il: 27 Dicembre 2012, 16:27:59 CET »
0
salve, nella home della mia app, devo mostrare una lista di feed rss, presi da un url.
i feed vengono mostrati in una listview.
ora vorrei che al click sull'elemento della listview mi si aprisse una nuova activity passando alla webview il codice html contenuto nel tag description del feed.
Il mio problema è che non riesco a gestire il click sulla lista, ho dei problemi con l'adapter

posto tutto il codice, cercando di commentarlo

Codice (Java): [Seleziona]
package uni.kore.it;


public class kActivity extends Activity {
 
    String feedUrl = "";
    ListView rssListView = null;
    ArrayList<RSSItem> RSSItems = new ArrayList<RSSItem>();
    ArrayAdapter<RSSItem> array_adapter = null;
   
       
     @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       setContentView(R.layout.home);
     
     //_Codice lettore feed rss______________________________________________________________
       
           
       feedUrl = "[url=http://www.unikore.it/index.php/tutte-le-news?format=feed";]Notizie[/url]
       
   
       refreshRSSList();
       
       rssListView = (ListView) findViewById(R.id.rssListView);
       
       array_adapter = new ArrayAdapter<RSSItem>(this, R.layout.list_item, RSSItems);   //creo l'adapter
      rssListView.setAdapter(array_adapter);     //lo setto nella list view
       
       
       //utilizzo dell'adapter
       //((ListView) findViewById(R.id.rssListView)).setAdapter(array_adapter);   //altro modo di settare l'adapter
     
       rssListView.setOnItemClickListener((OnItemClickListener) this);  //qui mi genera l'errore
       
       
       refreshRSSList();

       
       
     
       //___________________________________________________________________________________
       
       
       //qui c'è altro codice dell'activity
       
         
       }
     
     private void refreshRSSList() {
               
                ArrayList<RSSItem> newItems = RSSItem.getRSSItems(feedUrl);
                RSSItems.clear();
                RSSItems.addAll(newItems);
                 
            }
     
     //provo a gestire il click sulla lista
     
     public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             
         RSSItem b;
         b = RSSItems.get(position +1);   //metto il +1 perchè parte da 0
         String a = b.getDescription();
                       
//per il momento il campo description lo butto dentro un toast
                      Toast tt  = Toast.makeText(getBaseContext(),"descrizione: " +a,
                                                Toast.LENGTH_LONG);
                                                tt.show();
                    }
     
   
       }    

ho eliminato parte del codice che non interessa la domanda, quindi potrebbe esserci qualche problema di graffe.

questa è la classe rssitem

Codice (Java): [Seleziona]
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;

public class RSSItem {
   
    private String title;
    private String description;
    private Date date;
    private String link;
   
    public RSSItem(String title, String description, Date pubDate, String link) {
        this.title          = title;
        this.description = description;
        this.date           = 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 Date getPubDate() {
        return date;
    }
   
    public void setPubDate(Date pubDate) {
        this.date = pubDate;
    }
   
    public String getLink() {
        return link;
    }
   
    public void setLink(String link) {
        this.link = link;
    }
   
    @Override
    public String toString() {
       
        SimpleDateFormat sdf = new SimpleDateFormat("hh:mm - dd/MM/yy");
       
        String result = getTitle()  + " \n" +
                        " ( " + sdf.format(this.getPubDate()) + " )";
        return result;
    }
   
   
   
    public static ArrayList<RSSItem> getRSSItems(String feedUrl) {
       
        ArrayList<RSSItem> rssItems = new ArrayList<RSSItem>();
       
        try {
           
            URL url = new URL(feedUrl);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
           
            if (conn.getResponseCode() == HttpURLConnection.HTTP_OK) {
                //System.out.println("Richiesta http ok");
                InputStream is = conn.getInputStream();
               
                DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
                DocumentBuilder db = dbf.newDocumentBuilder();
               
               
                Document document = db.parse(is);
                Element element = document.getDocumentElement();
               
               
                NodeList nodeList = element.getElementsByTagName("item");
               
                if (nodeList.getLength() > 0) {
                    for (int i = 0; i < nodeList.getLength(); i++) {
                       
                        Element entry = (Element) nodeList.item(i);
                        Element _titleE       = (Element)entry.getElementsByTagName("title").item(0);
                        Element _descriptionE = (Element)entry.getElementsByTagName("description").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();
                        Date _pubDate           = new Date(_pubDateE.getFirstChild().getNodeValue());
                        String _link           = _linkE.getFirstChild().getNodeValue();
                       
                        RSSItem rssItem = new RSSItem(_title, _description, _pubDate, _link);
                       
                        rssItems.add(rssItem);
                       
                    }
                }
               
            }
           
            } catch (Exception e) {
           
            e.printStackTrace();
           
        }
       
        return rssItems;
    }
   
   
}

errore del logcat (class cast exception)

12-27 15:18:14.664: E/AndroidRuntime(508): FATAL EXCEPTION: main
12-27 15:18:14.664: E/AndroidRuntime(508): java.lang.RuntimeException: Unable to start activity ComponentInfo{uni.kore.it/uni.kore.it.Koreapp1Activity}: java.lang.ClassCastException: uni.kore.it.Koreapp1Activity
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.app.ActivityThread.access$1500(ActivityThread.java:117)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.os.Handler.dispatchMessage(Handler.java:99)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.os.Looper.loop(Looper.java:130)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.app.ActivityThread.main(ActivityThread.java:3683)
12-27 15:18:14.664: E/AndroidRuntime(508):    at java.lang.reflect.Method.invokeNative(Native Method)
12-27 15:18:14.664: E/AndroidRuntime(508):    at java.lang.reflect.Method.invoke(Method.java:507)
12-27 15:18:14.664: E/AndroidRuntime(508):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
12-27 15:18:14.664: E/AndroidRuntime(508):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
12-27 15:18:14.664: E/AndroidRuntime(508):    at dalvik.system.NativeStart.main(Native Method)
12-27 15:18:14.664: E/AndroidRuntime(508): Caused by: java.lang.ClassCastException: uni.kore.it.Koreapp1Activity
12-27 15:18:14.664: E/AndroidRuntime(508):    at uni.kore.it.Koreapp1Activity.onCreate(Koreapp1Activity.java:90)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
12-27 15:18:14.664: E/AndroidRuntime(508):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611)
12-27 15:18:14.664: E/AndroidRuntime(508):    ... 11 more




mi servirebbe aiuto per gestire il click, e poi per passare il codice html al browser, (o anche a una textview, dato che dovrebbe supportare il tag img src)
grazie!

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Problema list view rss
« Risposta #1 il: 27 Dicembre 2012, 16:35:04 CET »
+1
Codice (Java): [Seleziona]
 rssListView.setOnItemClickListener((OnItemClickListener) this);  //qui mi genera l'errorete lo dici da solo, ti da errore li!
l'errore è un classCastException, cioè cerchi di fare il cast di qualcosa a un qualcosa che non matcha. il tuo "this" è l'activity che non implementa l'interfaccia a cui la vuoi castare
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Problema list view rss
« Risposta #2 il: 27 Dicembre 2012, 16:36:47 CET »
+1
L'errore è un ClassCastException, stai semplicemente effettuando un cast errato...

Non vorrei sbagliarmi, ma penso che basti cambiare la dichiarazione dell' activity in:

Codice (Java): [Seleziona]
public class kActivity extends Activity implements OnItemClickListener
Ora come ora, stai castando un activity in un OnItemClickListener  ;-)
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema list view rss
« Risposta #3 il: 27 Dicembre 2012, 16:42:04 CET »
0
Grazie theBaffo!
mi ero perso nel this, perchè pensavo puntasse al singolo elemento della listview.
Ora come butto tutto dentro una textview o meglio un alert? (così da non dovre creare altre activity (ne ho già una 50ntina nell'app)

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema list view rss
« Risposta #4 il: 27 Dicembre 2012, 17:00:06 CET »
0
edit, ho risolto in questo modo (così magari è utile a qualcuno)



Codice (Java): [Seleziona]
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             
         RSSItem b;
         b = RSSItems.get(position);
         String str = b.getDescription();
                       
               
                                               
                WebView wv = new WebView(this);
               
                wv.loadData(str, "text/html", "utf-8");
                Dialog dialog = new Dialog(this) {


                public boolean onKeyDown(int keyCode, KeyEvent event){
                if (keyCode != KeyEvent.KEYCODE_DPAD_LEFT)
                this.dismiss();
                return true;
                                                }
                                                };     
                                               
                                               
                dialog.addContentView(wv, new LinearLayout.LayoutParams(500,700));
                dialog.show();                         
                                               
                    }
     


però vorrei poter metter il parametro match_parent per il linearlayout.. ma vuole solo 2 interi come parametri
"new LinearLayout.LayoutParams(500,700)"

« Ultima modifica: 27 Dicembre 2012, 17:15:46 CET da gabric »

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Problema list view rss
« Risposta #5 il: 27 Dicembre 2012, 17:50:33 CET »
+1
prova cosi  :-)

Codice (Java): [Seleziona]
dialog.addContentView(wv, new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema list view rss
« Risposta #6 il: 27 Dicembre 2012, 20:07:50 CET »
0
uhm così mi mostra solo il titolo...
ma ho risolto mettendo LayoutParams.WRAP_CONTENT


Grazie ancora

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema list view rss
« Risposta #7 il: 28 Dicembre 2012, 14:10:33 CET »
0
ho un altro problema. non so perchè ma il primo elemento della lista non è cliccabile.. qualcuno ha idea del perchè?

Offline theBaffo

  • Utente normale
  • ***
  • Post: 164
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Windows 8.1
Re:Problema list view rss
« Risposta #8 il: 28 Dicembre 2012, 14:19:49 CET »
0
Nel senso che non appare il Toast, o dà errore?
Se ti sono stato utile, premi "thanks" ;)

"Errare è umano, ma per incasinare davvero tutto è necessario un computer" - Arthur Bloch

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema list view rss
« Risposta #9 il: 28 Dicembre 2012, 16:36:11 CET »
0
non compare la dialog, non fa assolutamente niente.

edit:
il problema non dipende dal'ordine dei feed, ma dal fatto che nel primo c'erano dei numeri.
nel layout relativo al feed avevo inserito android:autoLink="all"  quindi lui gestive i numericome link, e bloccava l'operazione dell'onclick
« Ultima modifica: 28 Dicembre 2012, 16:41:45 CET da gabric »

Offline mikiconv

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Problema list view rss
« Risposta #10 il: 29 Agosto 2013, 15:51:54 CEST »
0
io ho ancora problemi, ecco il codice:
Codice (Java): [Seleziona]
public class RSS extends Activity implements OnItemClickListener{
     
    String feedUrl = "";
    ListView rssListView = null;
    ArrayList<RSSItem> RSSItems = new ArrayList<RSSItem>();
    ArrayAdapter<RSSItem> array_adapter = null;
     
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.rssmain);
         
        feedUrl = "[url=http://www.anddev.it/index.php?action=.xml;board=2;type=rss";]Android Developers Italia - News[/url]
         
        refreshRSSList();
         
        rssListView = (ListView) findViewById(R.id.rssListView);
         
        array_adapter = new ArrayAdapter<RSSItem>(this, R.layout.list_item, RSSItems);
       
        rssListView.setAdapter(array_adapter);
       
        rssListView.setOnItemClickListener((OnItemClickListener) this);

        refreshRSSList();
    }
     
    private void refreshRSSList() {
         
        ArrayList<RSSItem> newItems = RSSItem.getRSSItems(feedUrl);
        RSSItems.clear();
        RSSItems.addAll(newItems);
         
    }

   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
       
        RSSItem b;
        b = RSSItems.get(position);
        String str = b.getDescription();
                     
        WebView wv = new WebView(this);
             
        wv.loadData(str, "text/html", "utf-8");
        Dialog dialog = new Dialog(this) {

           public boolean onKeyDown(int keyCode, KeyEvent event){
           if (keyCode != KeyEvent.KEYCODE_DPAD_LEFT)
           this.dismiss();
           return true;
           }
        };    
                                             
        dialog.addContentView(wv, new LinearLayout.LayoutParams(500,700));
        dialog.show();                              
        }
}

Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema list view rss
« Risposta #11 il: 29 Agosto 2013, 15:52:58 CEST »
0
inserisci anche l'errore per piacere?

Offline mikiconv

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Problema list view rss
« Risposta #12 il: 29 Agosto 2013, 16:01:55 CEST »
0
AndroidRuntime(277): FATAL EXCEPTION: main
/AndroidRuntime(277): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.andrianews/com.example.andrianews.RSS}: java.lang.NullPointerException
AndroidRuntime(277):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
AndroidRuntime(277):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
AndroidRuntime(277):    at android.app.ActivityThread.access$2300(ActivityThread.java:125)
AndroidRuntime(277):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
AndroidRuntime(277):    at android.os.Handler.dispatchMessage(Handler.java:99)
AndroidRuntime(277):    at android.os.Looper.loop(Looper.java:123)
AndroidRuntime(277):    at android.app.ActivityThread.main(ActivityThread.java:4627)
AndroidRuntime(277):    at java.lang.reflect.Method.invokeNative(Native Method)
AndroidRuntime(277):    at java.lang.reflect.Method.invoke(Method.java:521)
AndroidRuntime(277):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
AndroidRuntime(277):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
AndroidRuntime(277):    at dalvik.system.NativeStart.main(Native Method)
AndroidRuntime(277): Caused by: java.lang.NullPointerException
AndroidRuntime(277):    at com.example.andrianews.RSS.onCreate(RSS.java:37)
AndroidRuntime(277):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
AndroidRuntime(277):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
AndroidRuntime(277):    ... 11 more


Offline gabric

  • Utente senior
  • ****
  • Post: 615
  • Respect: +18
    • Google+
    • Mostra profilo
    • Brancato's site
  • Dispositivo Android:
    Nexus 5 / Tablet mediacom s4
  • Play Store ID:
    Brancato's+app
  • Sistema operativo:
    window7. ubuntu
Re:Problema list view rss
« Risposta #13 il: 29 Agosto 2013, 16:02:55 CEST »
0
cosa c'è al rigo 37?

Offline mikiconv

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
Re:Problema list view rss
« Risposta #14 il: 29 Agosto 2013, 16:06:54 CEST »
0
cosa c'è al rigo 37?
Codice (Java): [Seleziona]
        rssListView.setAdapter(array_adapter);