Autore Topic: Più record sulla stessa carta  (Letto 1346 volte)

Offline Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Più record sulla stessa carta
« il: 03 Agosto 2012, 17:49:34 CEST »
0
Ciao a tutti ho un dubbio che mi arrovella da 2 ore a questa parte...

Come posso scrivere più record sulla stessa card?

Codice (Java): [Seleziona]
        private void write(String text, Tag tag) throws IOException, FormatException
        {
                //creazione del NdefRecord da spedire
                NdefRecord[] records = { createRecord(text), createRecord("secondo record") };
                //creazione del messaggio da inviare
                 
                NdefMessage  message = new NdefMessage(records);
                // Get an instance of Ndef for the tag.
                Ndef ndef = Ndef.get(tag);
                // Enable I/O
                ndef.connect();
                // Write the message
                ndef.writeNdefMessage(message);
                // Close the connection
                ndef.close();
        }

Però quando vado a leggere leggo solamente il primo il record...

di seguito la funzione che legge:

Codice (Java): [Seleziona]
        public void leggi(Intent intent)
        {
                //recupero i dati estensi dall'evento
                Parcelable[] rawMsgs = intent.getParcelableArrayExtra(NfcAdapter.EXTRA_NDEF_MESSAGES);
                String action = intent.getAction();
                NdefMessage[] msgs = null;
                if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)|| NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action))
            {
                if (rawMsgs != null)
                {
                       
                        msgs = new NdefMessage[rawMsgs.length];
                   
                    for (int i = 0; i < rawMsgs.length; i++) {
                       
                        msgs[i] = (NdefMessage) rawMsgs[i];
                    }
                    Toast.makeText(this, "Lunghezza raw:"+rawMsgs.length, Toast.LENGTH_LONG).show();
       
                    NdefMessage msg = msgs[0];
                    try
                    {
                        //estrapolazione del payload contenuto nel TAG
                        String temp = new String(msg.getRecords()[0].getPayload(), "UTF-8");
                        //taglio i primi 3 caratteri che sono identificativi della codifica
                        temp = temp.substring(3);
                       
                        //stampa della stringa con delle info per capire cosa ho letto
                        Toast.makeText(this,temp,Toast.LENGTH_SHORT).show();
                        temp = new String(msg.getRecords()[0].getType(),"UTF-8");
                        Toast.makeText(this,temp,Toast.LENGTH_SHORT).show();
                    }
                    catch (Exception e)
                    {
                        e.printStackTrace();
                    }
                }
            else
            {
                // Unknown tag type
                byte[] empty = new byte[] {};
                NdefRecord record = new NdefRecord(NdefRecord.TNF_UNKNOWN, empty, empty, empty);
                NdefMessage msg = new NdefMessage(new NdefRecord[] {
                    record
                });
                msgs = new NdefMessage[] { msg };
                Log.i("ProvaNfc2","tag sconosciuto");
            }
            }
        else
        {
                Log.i("ProvaNfc2","Tag sconosciuto");
            finish();
        }
        }

Questa funzione legge solo il primo record....
Come fare per leggere più record?
Non esistono problemi, ma solo soluzioni...

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:Più record sulla stessa carta
« Risposta #1 il: 03 Agosto 2012, 19:22:17 CEST »
0
uno sguardo alla documentazione:
NdefMessage | Android Developers
Citazione
An NdefMessage always has one or more NDEF Records: so the following code to retrieve the first record is always safe (no need to check for null or array length >= 1):

Quindi ti tiri fuori i records che sono NdefRecord[], ci fai un foreach e per ogniuno ci fai quello che vuoi, come hai fatto per i messages
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 Lomba1986

  • Utente normale
  • ***
  • Post: 173
  • Respect: +1
    • Mostra profilo
Re:Più record sulla stessa carta
« Risposta #2 il: 07 Agosto 2012, 16:26:41 CEST »
0
Mamma mia che cavolata  :D

E io che stupidamente m'intestardivo a vedere quante righe leggeva...non ho mai pensato che leggesse un'unica riga e che poi tale riga fosse composta da più record... Si vede che ero a fine giornata, visto che è anche evidente da come si scrive il codice...

Ciaoooo e grazie mille  :-P
Non esistono problemi, ma solo soluzioni...