• Android 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 替换为该例程对应的本地类型。

    Get<type>Field 例程名

    本地类型

    GetObjectField()

    jobject

    GetBooleanField()

    jboolean

    GetByteField()

    jbyte

    GetCharField()

    jchar

    GetShortField()

    jshort

    GetIntField()

    jint

    GetLongField()

    jlong

    GetFloatField()

    jfloat

    GetDoubleField()

    jdouble

    参数:

    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 替换为该例程对应的本地类型。

    Set<type>Field 例程名

    本地类型

    SetObjectField()

    jobject

    SetBooleanField()

    jboolean

    SetByteField()

    jbyte

    SetCharField()

    jchar

    SetShortField()

    jshort

    SetIntField()

    jint

    SetLongField()

    jlong

    SetFloatField()

    jfloat

    SetDoubleField()

    jdouble

    参数:

    env:JNI 接口指针。

    obj:Java 对象(不能为 NULL)。

    fieldID:有效的域 ID。

    value:域的新值。

  • 相关阅读:
    基于LBS(GPS)和ArcGIS的ITS智能交通 路况服务架构
    入手ipod touch4
    改2字节将Win XP Home变成Pro?!(zz)
    越来越多的同学在MSN上建Blog了……
    有了64位的芯不一定能运行64位OS?(zz)
    C++字符串完全指引之二——字符串封装类(zz)
    忙……
    注意C#中的ref及out关键字
    期待CGFTP 1.0正式版:)
    真伪双核 英特尔双核平台深度揭秘(zz)
  • 原文地址:https://www.cnblogs.com/renhui/p/9986058.html
Copyright © 2020-2023  润新知