Autore Topic: Parsing XML Pagina Aspx ( http response? )  (Letto 561 volte)

Offline Ray13

  • Utente junior
  • **
  • Post: 65
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Parsing XML Pagina Aspx ( http response? )
« il: 06 Maggio 2013, 16:38:05 CEST »
0
Allora ragazzi vi spiego in dettaglio cosa non riesco a capire.
Io ho diverse pagine aspx che hanno alcune funzioni a seconda di quale si seleziona. Una di queste per esempio fa una query al db e mi restituisce i dati in formato xml. Io dovrei fare il parsing dell'xml e prendere i dati ( dove li metto per ora non è importante. )

Ecco un esempio di quello che faccio:

Codice (Java): [Seleziona]
public class FormRegistrati extends Activity implements OnClickListener
{
        public EditText et_email_reg;
        public EditText et_password_reg;
        public EditText et_nome_reg;
        public EditText et_cognome_reg;
        public Button btn_conferma_reg;
        public static String email;
        public static String password;

        public static String province;
        public static String newsletter;
        public static String selected;
       
        String result="";
        String line="";
       
        static final String URL = "http://www.api.9android.net/music/music.xml";
        static final String KEY_SONG = "song"; // parent node
        static final String KEY_ID = "id";
        static final String KEY_TITLE = "title";

        ArrayList <String> array_id=new ArrayList<String>();
        ArrayList <String> array_title=new ArrayList<String>();
       
       
        @Override
        protected void onCreate(Bundle savedInstanceState) {
                // TODO Auto-generated method stub
                super.onCreate(savedInstanceState);
                setContentView(R.layout.form_registrati);
                btn_conferma_reg = (Button)findViewById(R.id.btn_conferma_reg);

        Spinner spinner = (Spinner)findViewById(R.id.spinner_provincia);
       
                btn_conferma_reg.setOnClickListener(this);
               
                ArrayList<HashMap<String, String>> songsList = new ArrayList<HashMap<String, String>>();

                XMLParser parser = new XMLParser();
                String xml = parser.getXmlFromUrl(URL); // getting XML from URL
                Document doc = parser.getDomElement(xml); // getting DOM element
               
                NodeList nl = doc.getElementsByTagName(KEY_SONG);

                // looping through all song nodes <song>

                for (int i = 0; i < nl.getLength(); i++) {
                        // creating new HashMap
                        HashMap<String, String> map = new HashMap<String, String>();
                        Element e = (Element) nl.item(i);


            array_id.add(parser.getValue(e, KEY_ID));
            array_title.add(parser.getValue(e, KEY_TITLE));
           

                        // adding HashList to ArrayList
                        songsList.add(map);
                }
     
                }
Questo qui sopra funziona tutto correttamente. Attualmente questo codice non fa altro che fare il parsing del testo xml. Prendo i campi id e title e li piazzo in due array.

Funziona.

Ma a me serve di prendere questi dati da una pagina aspx. Quindi cosa faccio: Cambio il link con il mio link.aspx
E modifico i tre campi con i campi dell'altra pagina.

NB:

L'altra pagina ha come campi questi:

Codice (XML): [Seleziona]
<provincelist>
<province province_code="084">
<province_name>
<![CDATA[ Agrigento ]]>
</province_name>
<province_abbreviation>AG</province_abbreviation>
</province>
<province province_code="006">
<province_name>
<![CDATA[ Alessandria ]]>
</province_name>
<province_abbreviation>AL</province_abbreviation>
</province>
</provincelist>

modifico in:


Codice (Java): [Seleziona]
       
        static final String KEY_SONG = "province"; // parent node
        static final String KEY_ID = "province_name";
        static final String KEY_TITLE = "province_abbreviation";

E ovviamente non funziona. Escono i seguenti errori:

Codice: [Seleziona]
05-06 14:28:46.531: E/AndroidRuntime(1870): FATAL EXCEPTION: main
05-06 14:28:46.531: E/AndroidRuntime(1870): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.anomos.shopandsave/it.anomos.shopandsave.FormRegistrati}: java.lang.NullPointerException
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2059)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2084)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.ActivityThread.access$600(ActivityThread.java:130)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1195)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.os.Handler.dispatchMessage(Handler.java:99)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.os.Looper.loop(Looper.java:137)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.ActivityThread.main(ActivityThread.java:4745)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at java.lang.reflect.Method.invokeNative(Native Method)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at java.lang.reflect.Method.invoke(Method.java:511)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at dalvik.system.NativeStart.main(Native Method)
05-06 14:28:46.531: E/AndroidRuntime(1870): Caused by: java.lang.NullPointerException
05-06 14:28:46.531: E/AndroidRuntime(1870):         at it.anomos.shopandsave.FormRegistrati.onCreate(FormRegistrati.java:80)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.Activity.performCreate(Activity.java:5008)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079)
05-06 14:28:46.531: E/AndroidRuntime(1870):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2023)
05-06 14:28:46.531: E/AndroidRuntime(1870):         ... 11 more



Io penso che forse per le pagina aspx non è la stessa cosa come per le pagine xml. Bisogna per caso fare prima la richiesta http per poi il parsing? magari con un asynk task?

Qualcuno mi può fare un esempio o dare una mano pls????
 :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[ :-[
« Ultima modifica: 06 Maggio 2013, 16:40:01 CEST da Ray13 »

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:Parsing XML Pagina Aspx ( http response? )
« Risposta #1 il: 06 Maggio 2013, 17:07:37 CEST »
0
Come prima cosa, anche se il codice ti funziona, non è correttamente implementato, perchè esegue la richiesta http dentro la onCreate (quindi nel thread di UI). Per esigenze di testing puoi anche provare a rimandare la transizione a thread o asynctask, ma metti in conto di doverlo fare in ogni caso.

A parte questo, mi sembra di capire che il problema sorge quando passi alle pagine aspx, per cui è ipotizzabile che il problema risieda nella risposta. Prova a fare la richiesta http e salvare il risultato in un file di testo nel terminale, così controlli questo step.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store