我正在尝试检索Mifare Classic 1k卡的UID,为此我使用此代码:
private String getUID(){
MifareClassic mfc = MifareClassic.get((Tag) intent.getParcelableExtra(NfcAdapter.EXTRA_TAG));
byte[] data;
byte[] sevenDigits = null;
String uid;
try{
mfc.connect();
boolean auth = false;
auth = mfc.authenticateSectorWithKeyA(0, MifareClassic.KEY_DEFAULT);
if(auth){
data = mfc.readBlock(mfc.sectorToBlock(0));
for (int i =0; i < 8; i++){
sevenDigits[i] = data[i];
}
return getHexString(sevenDigits);
} else {
return "Authenticatie mislukt";
}
} catch (IOException e) {
return null;
}
}
Eclipse不断向我发出关于此行的警告
for (int i = 0; i < 8; i++) {
sevenDigits[i] = data[i];
}
,说它在那时只能为空......我的问题是:我如何重写这段代码,以免这个警告消失?
答案 0 :(得分:0)
sevenDigits
定义为null且未修改。你可能需要打电话
sevenDigits = new byte[data.length];
循环之前
答案 1 :(得分:0)
您将sevenDigits []声明为null,您必须在使用它之前按其大小初始化它
sevenDigits[] = new byte[size];
不要在迭代器中使用静态值来获取长度,而是使用你想要在for循环中使用的数组的长度
data = mfc.readBlock(mfc.sectorToBlock(0));
sevenDigits[] = new byte[data.length];
for (int i =0; i < data.length; i++){
sevenDigits[i] = data[i];
}