0

NFCタグのndefメッセージを読み書きするアプリを作成しました。私のアプリは、NDEFメッセージで2つのNDEFレコードを正常に読み書きできます。しかし、NDEFメッセージ内にNDEFレコードが1つしかないタグを提示すると、アプリがクラッシュしました。私はその背後にある理由を知っています。また、それを解決する方法も知っていますが、それを解決するには、NDEFメッセージでレコード数を取得する方法を知る必要がありますか?

        NdefMessage[] msgs = getNdefMessagesFromIntent(intent);
        NdefRecord ndefRecord1 = msgs[0].getRecords()[0];
        NdefRecord ndefRecord2 = msgs[0].getRecords()[1]; //problem is here
        byte[] payload1 = ndefRecord1.getPayload();
        byte[] payload2 = ndefRecord2.getPayload();
        //Get the text encoding
        String textEncoding1 = ((payload1[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
        String textEncoding2 = ((payload2[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
        //Get the Language Code
        int languageCodeLength1 = payload1[0] & 0077;
        int languageCodeLength2 = payload2[0] & 0077;
        String text1 = null;
        String text2 = null;
        //Get the Text
        try 
        {
            text1 = new String(payload1, languageCodeLength1 + 1, payload1.length - languageCodeLength1 - 1, textEncoding1);
        } 
        catch (UnsupportedEncodingException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        //Get the Text
        try 
        {
            text2 = new String(payload2, languageCodeLength2 + 1, payload2.length - languageCodeLength2 - 1, textEncoding2);
        } 
        catch (UnsupportedEncodingException e) 
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        String payloadString1 = new String(text1);
        String payloadString2 = new String(text2);

        record1.setText(payloadString1);
        record2.setText(payloadString2);
4

1 に答える 1

0

実験した後、私はこの問題の解決策を自分で見つけました。それが他の人にも役立つことを願っています...

        NdefMessage[] msgs = getNdefMessagesFromIntent(intent);
        NdefRecord[] ndefRecords = msgs[0].getRecords();
        int totalRecords = ndefRecords.length;
        if(totalRecords == 2)
        {
            NdefRecord ndefRecord1 = msgs[0].getRecords()[0];
            NdefRecord ndefRecord2 = msgs[0].getRecords()[1];
            byte[] payload1 = ndefRecord1.getPayload();
            byte[] payload2 = ndefRecord2.getPayload();
            //Get the text encoding
            String textEncoding1 = ((payload1[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
            String textEncoding2 = ((payload2[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
            //Get the Language Code
            int languageCodeLength1 = payload1[0] & 0077;
            int languageCodeLength2 = payload2[0] & 0077;
            String text1 = null;
            String text2 = null;
            //Get the Text
            try 
            {
                text1 = new String(payload1, languageCodeLength1 + 1, payload1.length - languageCodeLength1 - 1, textEncoding1);
            }    
            catch (UnsupportedEncodingException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            //Get the Text
            try 
            {
                text2 = new String(payload2, languageCodeLength2 + 1, payload2.length - languageCodeLength2 - 1, textEncoding2);
            } 
            catch (UnsupportedEncodingException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            String payloadString1 = new String(text1);
            String payloadString2 = new String(text2);

            record1.setText(payloadString1);
            record2.setText(payloadString2);
        }
        else
        {
            NdefRecord ndefRecord1 = msgs[0].getRecords()[0];
            byte[] payload1 = ndefRecord1.getPayload();
            String textEncoding1 = ((payload1[0] & 0200) == 0) ? "UTF-8" : "UTF-16";
            int languageCodeLength1 = payload1[0] & 0077;
            String text1 = null;
            try 
            {
                text1 = new String(payload1, languageCodeLength1 + 1, payload1.length - languageCodeLength1 - 1, textEncoding1);
            }    
            catch (UnsupportedEncodingException e) 
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            String payloadString1 = new String(text1);
            record1.setText(payloadString1);
            record2.setText("");
        }
于 2013-02-27T11:15:16.677 に答える