Android JNI 學習(七):JNI 介面整理 — Accessing Fields Api
一、GetFieldID
jfieldIDGetFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig);
返回類的例項(非靜態)域的域 ID。該域由其名稱及簽名指定。訪問器函式的Get<type>Field 及 Set<type>Field 系列使用域 ID 檢索物件域。
GetFieldID()
將未初始化的類初始化。
GetFieldID()
不能用於獲取陣列的長度域。應使用GetArrayLength()
。
引數:
env:JNI 介面指標。
clazz
:Java 類物件。
name
:0 終結的 UTF-8 字串中的域名。
sig
:0 終結的 UTF-8 字串中的域簽名。
返回值:
域 ID。如果操作失敗,則返回NULL
。
丟擲:
NoSuchFieldError:如果找不到指定的域。
ExceptionInInitializerError
:如果由於異常而導致類初始化程式失敗。
OutOfMemoryError
:如果系統記憶體不足。
二、Get<type>Field Routines
NativeTypeGet<type>Field(JNIEnv*env, jobject obj, jfieldID fieldID);
該訪問器例程系列返回物件的例項(非靜態)域的值。要訪問的域由通過呼叫GetFieldID()
而得到的域 ID 指定。
下表說明了 Get<type>Field 例程名及結果型別。應將 Get<type>Field 中的 type 替換為域的 Java 型別(或使用表中的某個實際例程名),然後將NativeType 替換為該例程對應的本地型別。
|
|
引數:
env:JNI 介面指標。
obj
:Java 物件(不能為 NULL
)。
fieldID
:有效的域 ID。
返回值:
域的內容。
三、Set<type>Field Routines
voidSet<type>Field(JNIEnv *env, jobject obj, jfieldID fieldID, NativeType value);
該訪問器例程系列設定物件的例項(非靜態)域的值。要訪問的域由通過呼叫SetFieldID()
而得到的域 ID 指定。
下表說明了 Set<type>Field 例程名及結果型別。應將 Set<type>Field 中的 type 替換為域的 Java 型別(或使用表中的某個實際例程名),然後將NativeType 替換為該例程對應的本地型別。
引數:
env:JNI 介面指標。
obj
:Java 物件(不能為 NULL
)。
fieldID
:有效的域 ID。
value
:域的新值。