RFD2000 TC20 RFID TagData array null

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<ReaderDevice> 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<Void, Void, Boolean>() {

   @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<Void, Void, Void>() {

   @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<Void, Void, Void>() {

   @Override
   protected Void doInBackground(Void... voids) {

   try {

   reader.Actions.Inventory.stop();
   } catch (InvalidUsageException e) {

  e.printStackTrace();
   } catch (OperationFailureException e) {

  e.printStackTrace();
   }

   return null;
   }

  }.execute();
   }

  }

  }

  }

}