Autore Topic: PROBLEMA CON LINK DIRETTO ARTICOLI BLOG  (Letto 1711 volte)

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« il: 13 Febbraio 2013, 18:41:08 CET »
0
Ciao ragazzi!
ho bisogno di voi. Premetto che sono agli inizi, ho seguito un tutorial per creare un rss reader per android. Praticamente i feed vengono visualizzati in una listview e al click su di essi viene lanciata l'activity (chiamata DETAILACTIVITY) che permette di leggere l'articolo completo. Dato che in wordpress i feed vengono troncati (ho provato in mille modi per renderli completi) anche  nella mia app l'articolo risulta troncato e questo mi disgusta.
La mia idea è quella, quindi, di far leggere l'articolo direttamente nel blog e quindi di eliminare la "DETAILATIVITY". Dopo aver modificato il codice, ho provato l'app ma qui nasce il problema. Purtroppo al click su un elemento della listview il blog si apre ma nella home page mentre io vorrei che si aprisse direttamente nell'articolo scelto. Qui sotto vi allego il codice java:

Codice (Java): [Seleziona]
package com.giancarlo.gruppolevoci;

import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.view.MenuItem.OnMenuItemClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.giancarlo.gruppolevoci.ImageLoader;
import com.giancarlo.gruppolevoci.RSSFeed;

public class ListActivity extends Activity {

        Application myApp;
        RSSFeed feed;
        ListView lv;
        CustomListAdapter adapter;

        @Override
        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                setContentView(R.layout.feed_list);

                myApp = getApplication();

               
                feed = (RSSFeed) getIntent().getExtras().get("feed");

                // Inizializzo le variabili
                lv = (ListView) findViewById(R.id.listView);
                lv.setVerticalFadingEdgeEnabled(true);

                // Adapter per listview
                adapter = new CustomListAdapter(this);
                lv.setAdapter(adapter);

                // Setto l'evento al click su elemento listview
                lv.setOnItemClickListener(new OnItemClickListener() {

                        @Override
                        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                                        long arg3) {

                                int pos = arg2;

                                Bundle bundle = new Bundle();
                                bundle.putSerializable("feed", feed);
                                Uri uri = Uri.parse("http://www.miosito.altervista.org");
                                Intent intent = new Intent(Intent.ACTION_VIEW, uri);
                                intent.putExtras(bundle);
                                intent.putExtra("pos", pos);
                                startActivity(intent);

                        }
                });

        }

        @Override
        protected void onDestroy() {
                super.onDestroy();
                adapter.imageLoader.clearCache();
                adapter.notifyDataSetChanged();
        }

        class CustomListAdapter extends BaseAdapter {

                private LayoutInflater layoutInflater;
                public ImageLoader imageLoader;

                public CustomListAdapter(ListActivity activity) {

                        layoutInflater = (LayoutInflater) activity
                                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                        imageLoader = new ImageLoader(activity.getApplicationContext());
                }

                @Override
                public int getCount() {


                        return feed.getItemCount();
                }

                @Override
                public Object getItem(int position) {
                        return position;
                }

                @Override
                public long getItemId(int position) {
                        return position;
                }

                @Override
                public View getView(int position, View convertView, ViewGroup parent) {


                        View listItem = convertView;
                        int pos = position;
                        if (listItem == null) {
                                listItem = layoutInflater.inflate(R.layout.list_item, null);
                        }

                        // Inizializzo le view del layout
                        ImageView iv = (ImageView) listItem.findViewById(R.id.thumb);
                        TextView tvTitle = (TextView) listItem.findViewById(R.id.title);
                        TextView tvDate = (TextView) listItem.findViewById(R.id.date);

                        // setto le view del layout
                        imageLoader.DisplayImage(feed.getItem(pos).getImage(), iv);
                        tvTitle.setText(feed.getItem(pos).getTitle());
                        tvDate.setText(feed.getItem(pos).getDate());

                        return listItem;
                }

        }
       
        //visualizza menu premendo il tasto fisico del dispositivo
        public boolean onCreateOptionsMenu(Menu menu) {
                menu.add("Facebook").setIcon(R.drawable.facebook).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {
                                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("[url=http://m.facebook.com/gruppolevoci?v=feed&refid=17"]Gruppo &quot;LE VOCI&quot;[/url]));
                                startActivity(intent);
                                return true;
                        }
                });
                menu.add("Twitter").setIcon(R.drawable.twitter).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {
                                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://mobile.twitter.com/gruppo_le_voci"));
                                startActivity(intent);
                                return true;
                        }
                });
                menu.add("Video").setIcon(R.drawable.youtube).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {
                                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("[url=http://m.youtube.com/user/gruppolevoci/videos?gl=IT&hl=it&client=mv-google"]YouTube[/url]));
                                startActivity(intent);
                                return true;
                        }
                });
                menu.add("About").setIcon(R.drawable.about).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {
                                Intent from_to = new Intent(ListActivity.this, About.class);
                                startActivity(from_to);
                                return true;
                        }
                });
                menu.add("Info").setIcon(R.drawable.info).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {
                                Intent from_to = new Intent(ListActivity.this, Info.class);
                                startActivity(from_to);
                                return true;
                        }
                });
                menu.add("Esci").setIcon(R.drawable.chiudi).setOnMenuItemClickListener(new OnMenuItemClickListener() {
                        public boolean onMenuItemClick(MenuItem item) {
                                AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                                ListActivity.this);

                        // setto titolo alert dialog
                        alertDialogBuilder.setTitle("TERMINA APPLICAZIONE");
                        alertDialogBuilder.setIcon(R.drawable.alert);

                        // setto messaggio alert dialog
                        alertDialogBuilder
                                .setMessage("Sei sicuro di voler uscire?")
                                .setCancelable(false)
                                .setPositiveButton("SI",
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int id) {
                                                // if this button is clicked, close
                                                // current activity
                                                ListActivity.this.finish();
                                            }
                                        })
                                .setNegativeButton("NO",
                                        new DialogInterface.OnClickListener() {
                                            public void onClick(DialogInterface dialog,
                                                    int id) {
                                                // if this button is clicked, just close
                                                // the dialog box and do nothing
                                                dialog.cancel();
                                            }
                                        });

                        // creo l'alertdialog
                        AlertDialog alertDialog = alertDialogBuilder.create();

                        // mostro l'alertdialog
                        alertDialog.show();
                        // TODO Write the code to exit from the app, (gracefull exit)
                        return true;
                        }
                });
                return true;
                }

       
        //mostro dialog alla pressione del tasto fisico INDIETRO del dispositivo
        @Override
        public void onBackPressed() {
            new AlertDialog.Builder(this)
                .setIcon(R.drawable.alert)
                .setTitle("TERMINA APPLICAZIONE")
                .setMessage("Sei sicuro di voler uscire?")
                .setPositiveButton("SI", new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    finish();    
                }

            })
            .setNegativeButton("NO", null)
            .show();
        }

}

Probabilmente l'errore sta nella parte del click su un elemento della listview ma non saprei come modificare ulteriormente.

Aggiungo anche che non posseggo il LogCat in quanto provo l'app direttamente nel dispositivo.
Se avete bisogno di qualcos'altro sono a disposizione e chiedo ai moderatori di modificare il titolo nel caso sia necessario.

Confido in voi.
Grazie.
« Ultima modifica: 13 Febbraio 2013, 18:42:49 CET da birbantello85 »

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« Risposta #1 il: 13 Febbraio 2013, 20:15:42 CET »
0
Ho dato una rapidissima occhiata e sembrerebbe che il problema sia nel modo in cui scrivi l'URI, perchè ci metti l'indirizzo del sito e non quella dell'articolo scelto.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Re:PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« Risposta #2 il: 15 Febbraio 2013, 17:54:56 CET »
0
Il problema è che pgni articolo ha un indirizzo diverso: http://www.miosito.altervista.org/articolo-1, /articolo-2 etc. Come riesco ad intercettare il link di ogni singolo articolo? ho provato ad inserire accanto all'indirizzo del sito "+ get(position)" ma non funge.

Offline ciopper90

  • Utente junior
  • **
  • Post: 106
  • Respect: +4
    • Mostra profilo
Re:PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« Risposta #3 il: 15 Febbraio 2013, 19:38:53 CET »
0
Il problema è che pgni articolo ha un indirizzo diverso: http://www.miosito.altervista.org/articolo-1, /articolo-2 etc. Come riesco ad intercettare il link di ogni singolo articolo? ho provato ad inserire accanto all'indirizzo del sito "+ get(position)" ma non funge.
dal rss che parsi prima.li ci sono contenuti i link completi agli articoli

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Re:PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« Risposta #4 il: 15 Febbraio 2013, 19:59:39 CET »
0
dal rss che parsi prima.li ci sono contenuti i link completi agli articoli

ok, ma come faccio se con +get(position) non funge?

Offline ciopper90

  • Utente junior
  • **
  • Post: 106
  • Respect: +4
    • Mostra profilo
Re:PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« Risposta #5 il: 15 Febbraio 2013, 20:18:39 CET »
0
ok, ma come faccio se con +get(position) non funge?
senza vedere la classe rss faccio fatica a capirlo :D

Offline birbantello85

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    GALAXY ACE PLUS
  • Play Store ID:
    birbantello85
  • Sistema operativo:
    ANDROID 2.3.6
Re:PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« Risposta #6 il: 16 Febbraio 2013, 18:28:53 CET »
0
senza vedere la classe rss faccio fatica a capirlo :D

oops... scusami.
questa è la classe RSS FEED
Codice (Java): [Seleziona]
public class RSSFeed implements Serializable {
private static final long serialVersionUID = 1L;
private int _itemcount = 0;
private List _itemlist;
RSSFeed() {
_itemlist = new Vector(0);
}
void addItem(RSSItem item) {
_itemlist.add(item);
_itemcount++;
}
public RSSItem getItem(int location) {
return _itemlist.get(location);
}
public int getItemCount() {
return _itemcount;
}
}

questa invece è la classe RSSItem
Codice (Java): [Seleziona]
public class RSSItem implements Serializable {
private static final long serialVersionUID = 1L;
private String _title = null;
private String _description = null;
private String _date = null;
private String _image = null;
void setTitle(String title) {
_title = title;
}
void setDescription(String description) {
_description = description;
}
void setDate(String pubdate) {
_date = pubdate;
}
void setImage(String image) {
_image = image;
}
public String getTitle() {
return _title;
}
public String getDescription() {
return _description;
}
public String getDate() {
return _date;
}
public String getImage() {
return _image;
}
}

Se serve questa è la classe DOMParser:
Codice (Java): [Seleziona]
public class DOM_Parser {
private RSSFeed _feed = new RSSFeed();
public RSSFeed parseXml(String xml) {
URL url = null;
try {
url = new URL(xml);
} catch (MalformedURLException e1) {
e1.printStackTrace();
}
try {

DocumentBuilderFactory dbf;
dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
// Parse xml
Document doc = db.parse(new InputSource(url.openStream()));
doc.getDocumentElement().normalize();
//Get tags
NodeList nl = doc.getElementsByTagName("item");
int length = nl.getLength();
for (int i = 0; i < length; i++) {
Node currentNode = nl.item(i);
RSSItem _item = new RSSItem();
NodeList nchild = currentNode.getChildNodes();
int clength = nchild.getLength();
// Elementi richiesti da ogni item
for (int j = 1; j < clength; j = j + 2) {
Node thisNode = nchild.item(j);
String theString = null;
String nodeName = thisNode.getNodeName();
theString = nchild.item(j).getFirstChild().getNodeValue();
if (theString != null) {
if ("title".equals(nodeName)) {
// Node name is equals to 'title' so set the Node
// value to the Title in the RSSItem.
_item.setTitle(theString);
}
else if ("description".equals(nodeName)) {
_item.setDescription(theString);
// Parse the html description to get the image url
String html = theString;
org.jsoup.nodes.Document docHtml = Jsoup
.parse(html);
Elements imgEle = docHtml.select("img");
_item.setImage(imgEle.attr("src"));
}
else if ("pubDate".equals(nodeName)) {
// Eliminiiamo gli zeri nella data con un stringa vuota
String formatedDate = theString.replace(" +0000",
"");
_item.setDate(formatedDate);
}
}
}
// add item to the list
_feed.addItem(_item);
}
} catch (Exception e) {
}
// Return the final feed once all the Items are added to the RSSFeed
// Object(_feed).
return _feed;
}
}

« Ultima modifica: 16 Febbraio 2013, 18:37:48 CET da birbantello85 »

Offline ciopper90

  • Utente junior
  • **
  • Post: 106
  • Respect: +4
    • Mostra profilo
Re:PROBLEMA CON LINK DIRETTO ARTICOLI BLOG
« Risposta #7 il: 17 Febbraio 2013, 21:14:28 CET »
0
vanno modificate le classi per fare in modo che ci sia anche la variabile url a disposizione