簡體   English   中英

"如何修復“GetStatus Write RFID_API_UNKNOWN_ERROR data(x)-Field can only Take Word values”Android RFID 8500 Zebra"

[英]How to fix "GetStatus Write RFID_API_UNKNOWN_ERROR data(x)- Field can Only Take Word values" Android RFID 8500 Zebra

我正在嘗試開發和應用程序來讀取和寫入 RF 標簽。 閱讀是完美的,但我有寫作的問題。 特別是錯誤“GetStatus Write RFID_API_UNKNOWN_ERROR data(x)- Field can Only Take Word values”

我已經嘗試通過獲取 .apk 並對其進行解碼來對 Zebra RFID API Mobile 進行逆向工程,但代碼被混淆了,我無法破譯為什么該應用程序的 Write 有效而我的無效。

我在第 185 頁的https://www.ptsmobile.com/rfd8500/rfd8500-rfid-developer-guide.pdf中看到了錯誤,但我不知道是什么原因造成的。

我已經嘗試將 writeData 強制更改為 Hex,在我意識到 API 自己執行此操作之前,我也嘗試更改 writeData 的長度,但它只是得到一個空值。 我迷路了。

public boolean WriteTag(String sourceEPC, long Password, MEMORY_BANK memory_bank, String targetData, int offset) {
    Log.d(TAG, "WriteTag " + targetData);
    try {
        TagData tagData = null;
        String tagId = sourceEPC;
        TagAccess tagAccess = new TagAccess();
        tagAccess.getClass();
        TagAccess.WriteAccessParams writeAccessParams = tagAccess.new WriteAccessParams();
        String writeData = targetData; //write data in string
        writeAccessParams.setAccessPassword(Password);
        writeAccessParams.setMemoryBank(MEMORY_BANK.MEMORY_BANK_USER);

        writeAccessParams.setOffset(offset); // start writing from word offset 0
        writeAccessParams.setWriteData(writeData);
        // set retries in case of partial write happens
        writeAccessParams.setWriteRetries(3);
        // data length in words
        System.out.println("length: " + writeData.length()/4);
        System.out.println("length: " + writeData.length());
        writeAccessParams.setWriteDataLength(writeData.length()/4);
        // 5th parameter bPrefilter flag is true which means API will apply pre filter internally
        // 6th parameter should be true in case of changing EPC ID it self i.e. source and target both is EPC
        boolean useTIDfilter = memory_bank == MEMORY_BANK.MEMORY_BANK_EPC;
        reader.Actions.TagAccess.writeWait(tagId, writeAccessParams, null, tagData, true, useTIDfilter);
    } catch (InvalidUsageException e) {
        System.out.println("INVALID USAGE EXCEPTION: " + e.getInfo());
        e.printStackTrace();
        return false;
    } catch (OperationFailureException e) {
        //System.out.println("OPERATION FAILURE EXCEPTION");
        System.out.println("OPERATION FAILURE EXCEPTION: " + e.getResults().toString());
        e.printStackTrace();
        return false;
    }
    return true;
}

  • 密碼為 00
  • sourceEPC為讀取后得到的Tag ID
  • 內存庫為 MEMORY_BANK.MEMORY_BANK_USER
  • 目標數據為“8426017056458”
  • 偏移量為 0

它只是不斷給我“GetStatus Write RFID_API_UNKNOWN_ERROR data(x)- Field can Only Take Word values”,我不知道為什么會這樣,也不知道什么是“Word value”,我已經搜索過了. 這也都在“OperationFailureException”之下。 任何幫助將不勝感激,因為這種事情幾乎沒有在線資源。

即使這個問題有點老了,據我所知,我也遇到了同樣的問題,這應該是答案。

您的目標數據“8426017056458”長度為 13,在writeAccessParams.setWriteDataLength(writeData.length()/4)
你用四個來分開它。 現在,如果您嘗試寫入目標數據,則它比確定的WriteDataLength長。 這會引發錯誤。

一個“字”是 4 Hex => 16 位長。 因此,您的數據必須先填寫並將其轉換為十六進制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM