Java 如何在Android中将数据作为多条记录写入NFC标签?

Java 如何在Android中将数据作为多条记录写入NFC标签?,java,android,tags,nfc,ndef,Java,Android,Tags,Nfc,Ndef,我随后将数据写入NFC标签 这是我的和我的 我成功地将数据写入NFC标记 但它只将数据放在记录0中。没有在标记上创建其他记录 但是,我想将数据放入多个记录中,如记录0,记录1,记录2,记录3 所以我像这样修改了MainActivity @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.a

我随后将数据写入NFC标签

这是我的和我的

我成功地将数据写入NFC标记

但它只将数据放在
记录0
中。没有在标记上创建其他记录

但是,我想将数据放入多个记录中,如
记录0
记录1
记录2
记录3

所以我像这样修改了
MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    nfcMger = new NFCManager(this);

    v = findViewById(R.id.mainLyt);

    final EditText et0 = (EditText) findViewById(R.id.cnt0);
    final EditText et1 = (EditText) findViewById(R.id.cnt1);
    final EditText et2 = (EditText) findViewById(R.id.cnt2);
    final EditText et3 = (EditText) findViewById(R.id.cnt3);

    FloatingActionButton btn = (FloatingActionButton) findViewById(R.id.fab);
    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            String ct0 = et0.getText().toString();
            String ct1 = et1.getText().toString();
            String ct2 = et2.getText().toString();
            String ct3 = et3.getText().toString();


            message =  nfcMger.createUriMessage(ct0, "id");
            message =  nfcMger.createUriMessage(ct1, "name");
            message =  nfcMger.createUriMessage(ct2, "role");
            message =  nfcMger.createUriMessage(ct3, "level");


            if (message != null) {

                dialog = new ProgressDialog(MainActivity.this);
                dialog.setMessage("Tag NFC Tag please");
                dialog.show();
            }
        }
    });

}
但当我使用它并将数据写入标记时,它只在标记上存储一条
记录0
。没有其他记录

我只在
记录0
中获取最后保存的数据:

我的期望是将数据写入多个记录,如下所示:

message = new NdefMessage(new NdefRecord[] {
        NdefRecord.createTextRecord("en", "Text 1"),
        NdefRecord.createTextRecord("en", "Text 2"),
        NdefRecord.createTextRecord("en", "Text 3"),
        NdefRecord.createTextRecord("en", "Text 4"),
});

有谁能建议我如何将数据插入多个记录(
记录0
记录1
记录2
记录3

更新

参考user@Michael罗兰,我已经更新了我的密码,我收到了这个错误

在这里,我遵循并给出了
NdefRecord
方法,但当我为
message=newndefmessage(newndefrecord[]{

所以外面的消息不是一个错误,但我希望它在消息里面


感谢@Michael Roland的支持

您只能在标记上找到一条包含一条记录的消息,因为这就是您在代码中所做的。在这里,您可以创建一条包含一条URI记录的NDEF消息:

message =  nfcMger.createUriMessage(ct0, "id");
message =  nfcMger.createUriMessage(ct1, "name");
在下一行,您将使用另一条只包含一条URI记录的NDEF消息覆盖先前存储的消息(在
消息中引用):

message =  nfcMger.createUriMessage(ct0, "id");
message =  nfcMger.createUriMessage(ct1, "name");
在接下来的两行中,你再次做同样的事情:

message =  nfcMger.createUriMessage(ct2, "role");
message =  nfcMger.createUriMessage(ct3, "level");
因此,只有最后一行将有效地将NDEF消息存储在
消息中

然后,您可能会将该消息存储到tag1上

但是,鉴于上述屏幕截图,您可能更希望创建一条包含4条文本记录的NDEF消息。例如:

message = new NdefMessage(new NdefRecord[] {
        NdefRecord.createTextRecord("en", "Text 1"),
        NdefRecord.createTextRecord("en", "Text 2"),
        NdefRecord.createTextRecord("en", "Text 3"),
        NdefRecord.createTextRecord("en", "Text 4"),
});
顺便说一句,由于
createTextRecord()
仅从API级别21开始可用,因此您可能需要查看较低的API级别

还要注意,文本记录用于存储人类可读的文本数据。对于存储机器可读的信息,其他记录(如NFC论坛外部类型)更合适


(一)不过,您似乎不太愿意提出一个问题,但相信您的问题的读者会希望浏览GitHub上大量不必要的代码来了解您的问题。请注意,该代码可能在问题的整个生命周期中都不存在,一旦源代码消失,您的问题将对o瑟斯


最后,请注意,如果您确实观察到标签上有一条文本值为“junior”的text/plain类型的记录,那么您肯定不会在没有进一步修改的情况下使用来自GitHub的代码,因为您所揭示的代码会创建一条记录(格式不正确?)URI记录。

感谢更新的答案,但我在
消息中遇到错误,因为我已将其声明为
private NdefMessage message=null;
因此我将其修改为
private NdefRecord[]message=null;
以及在
createTextRecord
上,因此我使用Api 19,因为您至少可以更新Api的答案19@MLN有关获取
createTextRecord()的方法,请参阅
API级别低于21。请检查我更新的问题,以便帮助解决我的问题thanks@MLN您阅读了链接的答案吗?只需从
NdefRecord.createTextRecord()
中删除
NdefRecord.
部分,即可使用您似乎已添加到活动中的
createTextRecord()
方法。