我使用google的nfc功能来开发基于RF卡的程序。这是我的方法,我认为问题是数据对象
unsigned char *CNFCFunList::jbyteArray2Byte(jbyteArray data, int *outLen)
{
LOGI("jbyteArray2Byte begin");
if (data == NULL)
{
LOGI("data is NULL");
return 0;
}
jsize size = m_pJNIEnv->GetArrayLength(data);
LOGI("GetArrayLength begin %d",size);
//LOGI("GetByteArrayElements begin,data length = %d",env->GetArrayLength(data));
jbyte * olddata = (jbyte*)m_pJNIEnv->GetByteArrayElements(data, 0);
jsize oldsize = m_pJNIEnv->GetArrayLength(data);
unsigned char* bytearr = (unsigned char*)olddata;
*outLen = (int)oldsize;
return bytearr;}
但我得到了JNI警告:在Lcom/uai/ JNI /.中调用带有异常挂起的jni方法;(J[BJI) (GetArrayLength)待定异常是:
而且我也得到了例外
I/dalvikvm(5836): java.io.IOException: Transceive failed
11-23 10:19:35.269: I/dalvikvm(5836): at android.nfc.TransceiveResult.getResponseOrThrow(TransceiveResult.java:52)
11-23 10:19:35.269: I/dalvikvm(5836): at android.nfc.tech.BasicTagTechnology.transceive(BasicTagTechnology.java:151)
11-23 10:19:35.269: I/dalvikvm(5836): at android.nfc.tech.IsoDep.transceive(IsoDep.java:172)
11-23 10:19:35.269: I/dalvikvm(5836): at com.uai.jni.libUai.uaiGenKeyPair(Native Method)
11-23 10:19:35.269: I/dalvikvm(5836): at 发布于 2012-11-23 15:44:43
com.uai.jni.libUai.uaiGenKeyPair是一个本地方法,发生java.io.IOException: Transceive failed。ExceptionOccurred()来观察方法结果和/或手动检查。似乎您在uaiGenKeyPair之后都没有这样做,只是继续执行JNI。m_pJNIEnv->GetArrayLength(data),JNI机器表示反对,因为只有非常有限的一组JNI方法可以在挂起异常时执行。您必须清除和/或将异常从JNI层重新抛回Java。我在这里找到了一章关于盛良优秀的JNI在线书中的例外(不能让它点击,所以对象是数字IP):
http://192.9.162.55/docs/books/jni/html/exceptions.htmlhttps://stackoverflow.com/questions/13522472
复制相似问题