我有初始化NFC适配器的代码,但是我不确定在onCreate期间如何初始化变量。无论NFC TAG是否在附近,都可以初始化该应用。如果有人只是打开了该应用程序。因此,当我下到NfcV nfcMessage = NfcV.get(new TagGet().getTag());这行时,由于它为空,它崩溃了,如果您只是自己加载应用程序,则那里没有标签。我如何在这里检查!= null我不确定要检查哪个部分或如何构造此代码。

结果是我想读取存在标签的IFF标签的内容。否则,只需加载布局并等待NfcV标签被扫描。

// Setup an intent filter for all MIME based dispatches
    IntentFilter nfcv = new IntentFilter(NfcAdapter.ACTION_TAG_DISCOVERED);
    try {
        nfcv.addDataType("*/*");
    } catch (MalformedMimeTypeException e) {
        throw new RuntimeException("fail", e);
    }
    mFilters = new IntentFilter[] {
            nfcv,
    };

    // Setup a tech list for all NfcF tags
    mTechLists = new String[][] { new String[] { NfcV.class.getName() } };

    //mAdapter.enableForegroundDispatch(this, mPendingIntent, mFilters, mTechLists);

    NfcV nfcMessage = NfcV.get(new TagGet().getTag());

    byte[] data = new byte[2048]; //tag length can't be any larger
    String value = "";
    try {
        data = nfcMessage.transceive(new byte[2048]);
        value = new String(data);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();

最佳答案

听到的是我制作第一个Nfc应用程序的基本方法的代码概述。我尝试替换值(我使用nfcA而不是nfcV),以便您可以更好地阅读。这是一个非常基本的结构,您需要用自己的代码填充各个部分,但是它应该使您对NFC应用程序的结构如何工作有一个很好的了解。

public class Android_nfc_ibox extends Activity implements Runnable {




NfcAdapter mNfcAdapter;
private String[][] mTechLists;
PendingIntent pendingIntent;
Tag tag;
NfcA mTag;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Initialize the NFC adapter
    mNfcAdapter = NfcAdapter.getDefaultAdapter(this);
    if (mNfcAdapter != null) {
        dialog_text.append("Tap an NFC tag for access\n\r");
    } else {
        dialog_text.append("This phone is not NFC enabled\n\r");
    }

    // Create the PendingIntent object which will contain the details of the tag that has been scanned
    pendingIntent = PendingIntent.getActivity(this, 0, new Intent(this, getClass()).addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP), 0);

    // Setup a tech list for all desired tag types
    mTechLists = new String[][] { new String[] { NfcA.class.getName() } };

}

    /** Re-enable the tag dispatch if the app is in the foreground */
   @Override
    public void onResume() {
        super.onResume();
        if (mNfcAdapter != null) mNfcAdapter.enableForegroundDispatch(this, pendingIntent, null, mTechLists);
    }

   /** Disable the tag dispatch when the app is no longer in the foreground */
    @Override
    public void onPause() {
        super.onPause();
        if (mNfcAdapter != null) mNfcAdapter.disableForegroundDispatch(this);
    }

    /** A tag has been discovered */
    @Override
    public void onNewIntent(Intent intent){

        // get the tag object for the discovered tag
        Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);

        // try and get the MifareUltralight instance for this tag
        mTag = NfcV.get(tag);

        // if null then this wasn't a NfcV tag so wait for next time
        if(mTag == null){
            dialog_text.append("Not a Nfc V tag\n\r");
        }

           // Start the tag communications thread
           Thread myThread = new Thread(this);
           myThread.start();

        }
    }

   // (we could create other threads for other types of tags)
   public void run(){
       // try to connect to the Nfc V tag
       try{

           mTag.connect();
       }catch(IOException e){
            //handle the error here
       }

       //this will send raw data
       //send the values you want in the byte[]
       //just add the raw hex values with commas
       //pageBuffer is an array that will hold the response
       try{
           pageBuffer = mTag.transceive(new byte[] {0x11, 0x24, 0x11});
       }catch(IOException e){
            //handle error here
       }
    }


}

关于android - Android NFC,在onCreate中进行空值检查吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7728976/

10-09 12:53