Autore Topic: Parsing file xml click sulle singole voci  (Letto 268 volte)

Offline fragia

  • Nuovo arrivato
  • *
  • Post: 17
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Note II
  • Sistema operativo:
    Mac OS X
Parsing file xml click sulle singole voci
« il: 27 Giugno 2014, 12:03:12 CEST »
0
Salve,

ho questo codice  che visualizza una list view dopo aver fatto il parsing di un file xml, fin qui tutto ok ora sulle sigole voci io vorrei quando clicco aprire una nuova pagina contente i vlaori passati dalla riga di riferimenti, titolo, data e visualizzarli in questa nuova activity, io sono riusci a farl aprire un nuova pagina al click ma non so come recupera i singoli valori della riga per poterli passa. Aituto grazie

codice inserito nel click che apre la pagina
Codice (Java): [Seleziona]
 @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
       
        //metodo recupero
        Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
        startActivity(in);
    }

Tutto il codice della pagina
Codice (Java): [Seleziona]
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

import com.theopentutorials.android.adapters.CustomListViewAdapter;
import com.theopentutorials.android.beans.Laptop;
import com.theopentutorials.android.xml.sax.SAXXMLParser;

import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Adapter;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
 
public class SAXParserAsyncTaskActivity extends Activity implements
        OnClickListener, OnItemClickListener {
    Button button;
    ListView listView;
    List<Laptop> laptops;
    CustomListViewAdapter listViewAdapter;
     
    static final String URL = "http://miosito/laptops.xml";
        private static final String KEY_DATA = null;
     
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
         
        findViewsById();
        button.setOnClickListener(this);
        listView.setOnItemClickListener(this);
    }
     
    private void findViewsById() {
        button = (Button) findViewById(R.id.button);
        listView = (ListView) findViewById(R.id.laptopList);
    }
 
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
       
        //metodo recupero
        Intent in = new Intent(getApplicationContext(), SingleMenuItemActivity.class);
        startActivity(in);
    }
     
    @Override
    public void onClick(View view) {
        GetXMLTask task = new GetXMLTask(this);
        task.execute(new String[] { URL });    
    }
     
    //private inner class extending AsyncTask
    private class GetXMLTask extends AsyncTask<String, Void, List<Laptop>> {
        private Activity context;
        public GetXMLTask(Activity context) {
            this.context = context;
        }
         
        @Override
        protected void onPostExecute(List<Laptop> laptops) {
            listViewAdapter = new CustomListViewAdapter(context, laptops);
            listView.setAdapter(listViewAdapter);
        }
 
        /* uses HttpURLConnection to make Http request from Android to download
         the XML file */

        private String getXmlFromUrl(String urlString) {
            StringBuffer output = new StringBuffer("");
            try {
                InputStream stream = null;
                URL url = new URL(urlString);
                URLConnection connection = url.openConnection();
 
                HttpURLConnection httpConnection = (HttpURLConnection) connection;
                httpConnection.setRequestMethod("GET");
                httpConnection.connect();
 
                if (httpConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                    stream = httpConnection.getInputStream();
 
                    BufferedReader buffer = new BufferedReader(
                            new InputStreamReader(stream));
                    String s = "";
                    while ((s = buffer.readLine()) != null)
                        output.append(s);
                }
                 
            } catch (Exception ex) {
                ex.printStackTrace();
            }
            return output.toString();
             
            /* ---Using Apache DefaultHttpClient for applications targeting
             Froyo and previous versions --- */

            /*String xml = null;
 
            try {
                DefaultHttpClient httpClient = new DefaultHttpClient();
                HttpGet httpGet = new HttpGet(url);
 
                HttpResponse httpResponse = httpClient.execute(httpGet);
                HttpEntity httpEntity = httpResponse.getEntity();
                xml = EntityUtils.toString(httpEntity);
 
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            } catch (ClientProtocolException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return xml;*/

        }
 
        @Override
        protected List<Laptop> doInBackground(String... urls) {
            List<Laptop> laptops = null;
            String xml = null;
            for (String url : urls) {
                xml = getXmlFromUrl(url);
 
                InputStream stream = new ByteArrayInputStream(xml.getBytes());
                laptops = SAXXMLParser.parse(stream);
 
                for (Laptop laptop : laptops) {
                    String imageURL = laptop.getImageURL();
                    Bitmap bitmap = null;
                    BitmapFactory.Options bmOptions = new BitmapFactory.Options();
                    bmOptions.inSampleSize = 1;
 
                    try {
                        bitmap = BitmapFactory
                                .decodeStream(new
                                URL(imageURL).openStream(),
                                null, bmOptions);
                    } catch (MalformedURLException e) {
                        e.printStackTrace();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    laptop.setImageBitmap(bitmap);
                }
            }
            // stream.close();
            return laptops;
        }
    }
}







Post unito: 27 Giugno 2014, 16:06:35 CEST

ho fatto delle prove così mi visualizza tutto codice strano e non il valore

Codice (Java): [Seleziona]
 public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
       

        TextView data = (TextView)  view.findViewById(R.id.price);

       
        Intent nuovaPagina = new Intent(this, SingleMenuItemActivity.class);  
        nuovaPagina.putExtra("NomeDati1", data.toString());  
        nuovaPagina.putExtra("NomeDati2", "Valore da passare01");  
        startActivity(nuovaPagina);
    }
« Ultima modifica: 27 Giugno 2014, 16:06:35 CEST da fragia, Reason: Merged DoublePost »

Offline alfy91

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: +2
    • @piscitelli91
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Sistema operativo:
    Windows 8
Re:Parsing file xml click sulle singole voci
« Risposta #1 il: 09 Luglio 2014, 09:35:21 CEST »
0
Quando effettui il parsing del tuo file, conviene crearti una classe che lo astragga, in modo che hai degli oggetti con tutti i valori che ti interessano (viceversa dovresti riparsare il file, e non ne vale la pena). Avrai quindi un arrayList (o un array, vedi tu cosa ti è più comodo) con tutti i valori. Al click sull'elemento non dovrai far altro che passare l'elemento i-esimo all'activity/fragment successivo, utilizzando putSerializable. (Questo significa che la classe che rappresenta il tuo file xml dovrà implementare Serializable).
Facci sapere.
;)