Android 保存多个NFC标记-发布修改教程以保存多个NDef记录

Android 保存多个NFC标记-发布修改教程以保存多个NDef记录,android,nfc,Android,Nfc,我遵循一个教程,它允许用户将数据保存到NFC标签。我试图修改教程源代码,以包含第二个EditText字段并保存第二个标记,但是,如果注释掉以下行,我只能保存第二个NDef记录: //写入(message.getText().toString(),mytag) 我需要能够写入两个标记: write(message.getText().toString(),mytag); 及 …但我需要帮助将它们连接在一起 这里有一个示例显示如何添加多个标记: 但是我需要帮助格式化我的当前源以反映此方法。(每次

我遵循一个教程,它允许用户将数据保存到NFC标签。我试图修改教程源代码,以包含第二个EditText字段并保存第二个标记,但是,如果注释掉以下行,我只能保存第二个NDef记录:

//写入(message.getText().toString(),mytag)

我需要能够写入两个标记:

write(message.getText().toString(),mytag);

…但我需要帮助将它们连接在一起

这里有一个示例显示如何添加多个标记:

但是我需要帮助格式化我的当前源以反映此方法。(每次尝试时,我的日志中都会出现其他问题或强制关闭问题。)

提前谢谢

爪哇:

XML:


教程源代码(显示上面只保存一条NDef记录的源代码的实现-我已将其修改为保存两条NDef记录)


注释掉这一行:

write(message.getText().toString(),mytag);
我认为它会起作用

我认为问题在于
write()
方法被设计为只写入一个标记,并且在调用第二个write()方法时,标记仍然被第一个write()方法锁定。如果我是你,我会尝试在写()定义中添加第二个字段,或者如果这是不可能的,我会尝试把这两个字段的文本和中间的一个标记串在一起。p> 另外,为了编写正确的代码,我会在自己的线程中使用AsyncTask执行nfc部分,以确保它不会阻塞UI线程。我理解为什么写教程的家伙没有这么做,这会使他的教程比他想要的复杂得多,但是做nfc是你应该避免在UI线程中做的事情

关于第二个问题:

这或许可以做到:

private void write(String text, String text2, Tag tag) throws IOException, FormatException {

    NdefRecord[] records = { createRecord(text), createRecord(text2) };
    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();
}
当然,这意味着您必须这样称呼它(因为它现在还有一个参数):


mytag=intent.getParcelableExtra(NfcAdapter.EXTRA_标记);Toast.makeText(this,this.getString(R.string.ok_detection)+mytag.toString(),Toast.LENGTH_LONG.show();Toast是否显示来自意图的内容?否-单击写入按钮时不会显示Toast(唯一显示的Toast是当您将NFC标记靠近设备时),我已注释掉写入(message.getText().toString(),mytag2);应用程序停止强制关闭(谢谢),但我想知道在write()定义中添加第二个字段的正确方法!(提前感谢!-John)编写(message.getText().toString(),mytag,mytag2);在您对onNewIntent(Intent-Intent)的定义中似乎不起作用,您已将其硬编码为使用mytag。这可能就是问题所在。注释掉建议的行可以保存第二条记录,但是我在将建议的示例实现到源代码中时遇到了严重的问题。非常感谢您的帮助。。。(而且非常宝贵!)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="vertical" >

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Please Enter Your Password: ">
    </TextView>



         <EditText
            android:id="@+id/edit_message2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:hint="SSID" />



     <EditText
            android:id="@+id/edit_message"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:hint="WiFi Password" />

        <Button
            android:id="@+id/button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Write!!" />

</LinearLayout>
write(message.getText().toString(),mytag);
private void write(String text, String text2, Tag tag) throws IOException, FormatException {

    NdefRecord[] records = { createRecord(text), createRecord(text2) };
    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();
}
write(message.getText().toString(), message2.getText().toString(), mytag2);