RFD2000 TC20 RFID TagData array null

I Ifor Darby-Hoskin 3 years 6 months ago
29 0 0

Hi,

I am using a modified version of the demo code from the rfid-sdk-for-android-dg-en.pdf documentation.

I am having an interesting problem that the TagData[] myTags array is null but not always. I have included the code bellow if anyone can point me in the right direction i would be grateful.

package uk.co.assettrac.rfd2000_tc20_example;import android.os.AsyncTask;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.widget.TextView;import android.widget.Toast;import com.zebra.rfid.api3.*;import java.util.ArrayList;public class MainActivity extends AppCompatActivity {
   private static Readers readers;  private static ArrayList availableRFIDReaderList;  private static ReaderDevice readerDevice;  private static RFIDReader reader;  private static String TAG = "DEMO";   TextView textView;  private EventHandler eventHandler;   @Override   protected void onCreate(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);   setContentView(R.layout.activity_main);// UI   textView = (TextView) findViewById(R.id.TagText);// SDK   if (readers == null) {
   readers = new Readers(this, ENUM_TRANSPORT.SERVICE_SERIAL);   }
   new AsyncTask() {
   @Override   protected Boolean doInBackground(Void... voids) {
   try {
   if (readers != null) {
   if (readers.GetAvailableRFIDReaderList() != null) {
   availableRFIDReaderList =
   readers.GetAvailableRFIDReaderList();  if (availableRFIDReaderList.size() != 0) {
// get first reader from list   readerDevice = availableRFIDReaderList.get(0);   reader = readerDevice.getRFIDReader();  if (!reader.isConnected()) {
// Establish connection to the RFID Reader   reader.connect();   ConfigureReader();  return true;   }
  }
  }
  }
  } catch (InvalidUsageException e) {
  e.printStackTrace();   } catch (OperationFailureException e) {
  e.printStackTrace();   Log.d(TAG, "OperationFailureException " + e.getVendorMessage());   }
   return false;   }
   @Override   protected void onPostExecute(Boolean aBoolean) {
   super.onPostExecute(aBoolean);  if (aBoolean) {
  Toast.makeText(getApplicationContext(), "Reader Connected",   Toast.LENGTH_LONG).show();//textView.setText("Reader connected");   }
  }
  }.execute();   }

   private void ConfigureReader() {
   if (reader.isConnected()) {
  TriggerInfo triggerInfo = new TriggerInfo();   triggerInfo.StartTrigger.setTriggerType(START_TRIGGER_TYPE.START_TRIGGER_TYPE_IMMEDIATE);   triggerInfo.StopTrigger.setTriggerType(STOP_TRIGGER_TYPE.STOP_TRIGGER_TYPE_IMMEDIATE);  try {
// receive events from reader   if (eventHandler == null)
   eventHandler = new EventHandler();   reader.Events.addEventsListener(eventHandler);// HH event   reader.Events.setHandheldEvent(true);// tag event with tag data   reader.Events.setTagReadEvent(true);   reader.Events.setAttachTagDataWithReadEvent(true);// set trigger mode as rfid so scanner beam will not come   reader.Config.setTriggerMode(ENUM_TRIGGER_MODE.RFID_MODE, true);// set start and stop triggers   reader.Config.setStartTrigger(triggerInfo.StartTrigger);   reader.Config.setStopTrigger(triggerInfo.StopTrigger);   } catch (InvalidUsageException e) {
  e.printStackTrace();   } catch (OperationFailureException e) {
  e.printStackTrace();   }
  }
  }
   @Override   protected void onDestroy() {
   super.onDestroy();  try {
   if (reader != null) {
   reader.Events.removeEventsListener(eventHandler);   reader.disconnect();   Toast.makeText(getApplicationContext(), "Disconnecting reader",   Toast.LENGTH_LONG).show();   reader = null;   readers.Dispose();   readers = null;   }
  } catch (InvalidUsageException e) {
  e.printStackTrace();   } catch (OperationFailureException e) {
  e.printStackTrace();   } catch (Exception e) {
  e.printStackTrace();   }
  }

   // Read/Status Notify handler// Implement the RfidEventsLister class to receive event notifications   public class EventHandler implements RfidEventsListener {
   // Read Event Notification   public void eventReadNotify(RfidReadEvents e) {
// Recommended to use new method getReadTagsEx for better performance in case of large tag population   TagData[] myTags = reader.Actions.getReadTags(100);  if (myTags != null) {
   for (int index = 0; index myTags.length; index++) {
  Log.d(TAG, "Tag ID " + myTags[index].getTagID());  if (myTags[index].getOpCode() ==
  ACCESS_OPERATION_CODE.ACCESS_OPERATION_READ &&
  myTags[index].getOpStatus() ==
  ACCESS_OPERATION_STATUS.ACCESS_SUCCESS) {
   if (myTags[index].getMemoryBankData().length() > 0) {
  Log.d(TAG, " Mem Bank Data " + myTags[index].getMemoryBankData());   }
  }
  }
  } else {
  Log.d(TAG, "TagData Array Null");   }
  }
   // Status Event Notification   public void eventStatusNotify(RfidStatusEvents rfidStatusEvents) {
  Log.d(TAG, "Status Notification: " +
  rfidStatusEvents.StatusEventData.getStatusEventType());  if (rfidStatusEvents.StatusEventData.getStatusEventType() ==
  STATUS_EVENT_TYPE.HANDHELD_TRIGGER_EVENT) {
   if   (rfidStatusEvents.StatusEventData.HandheldTriggerEventData.getHandheldEvent() ==
  HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_PRESSED) {
   new AsyncTask() {
   @Override   protected Void doInBackground(Void... voids) {
   try {
   reader.Actions.Inventory.perform();   } catch (InvalidUsageException e) {
  e.printStackTrace();   } catch (OperationFailureException e) {
  e.printStackTrace();   }
   return null;   }
  }.execute();   }

   if (rfidStatusEvents.StatusEventData.HandheldTriggerEventData.getHandheldEvent() ==
  HANDHELD_TRIGGER_EVENT_TYPE.HANDHELD_TRIGGER_RELEASED) {
   new AsyncTask() {
   @Override   protected Void doInBackground(Void... voids) {
   try {
   reader.Actions.Inventory.stop();   } catch (InvalidUsageException e) {
  e.printStackTrace();   } catch (OperationFailureException e) {
  e.printStackTrace();   }
   return null;   }
  }.execute();   }
  }
  }
  }
}

CONTACT
Can’t find what you’re looking for?