<dfn id="is4kg"></dfn>
  • <ul id="is4kg"></ul>
  • <abbr id="is4kg"></abbr>
  • <ul id="is4kg"></ul>
    <bdo id="is4kg"></bdo>

    Rss & SiteMap

    曙海教育集團論壇 http://www.bjzhda.cn

    曙海教育集團論壇
    共1 條記錄, 每頁顯示 10 條, 頁簽: [1]
    [瀏覽完整版]

    標題:Android學習開發(fā)4--Android在C++中調用java(3)

    1樓
    wangxinxin 發(fā)表于:2010-12-3 11:51:12

    5.2 java類的實例化
    都知道java需要 obj var = new obj();這樣一個過程,我們在C++中調用java類的成員函數(shù),當然也要先示例話一個類。
    示例化的函數(shù)如下所示
    jobject getInstance(JNIEnv* env, jclass obj_class)
    {
        jmethodID construction_id = env->GetMethodID(obj_class, "<init>", "()V");
        jobject obj = env->NewObject(obj_class, construction_id);
        return obj;
    }
    這個函數(shù)中的env表示環(huán)境參數(shù),jclass表示一個java類的句柄。
    jmethodID construction_id = env->GetMethodID(obj_class, "<init>", "()V");
    GetMethodID的參數(shù)分別為(類句柄,方法名稱,參數(shù)名稱)
    這個是為了獲取java類中某個方法的句柄,有一點需要特別注意的,在獲取構造方法的句柄和別的方法的句柄是不一樣的。
    獲取一般方法的句柄所填寫“方法名稱”參數(shù)直接就是這個方法的名稱,而構造函數(shù)的話就必須填寫"<init>"。除了這點區(qū)別外,就沒有區(qū)別了。
    而我們的“參數(shù)名稱”似乎寫的就有些奇怪了。但是細說下他的規(guī)律也就不怪了。
    參數(shù)名稱的書寫規(guī)則為 (參數(shù)1類型,參數(shù)2類型….)返回類型。而相應類型的表示如下所示
    圖片點擊可在新窗口打開查看

    比如我們要找個int func(double)類型的函數(shù),就該這么寫:
    jmethodID construction_id = env->GetMethodID(obj_class, " func ", "(D)I");
    找到了構造函數(shù)的方法之后我們直接調用構造函數(shù),然后把生成的類返回即可
    jobject obj = env->NewObject(obj_class, construction_id);
    其中obj_class為類的句柄construction_id為構造函數(shù)的句柄,而類的實例被該函數(shù)返回。

    5.3 調用java類的其他函數(shù)
    JNIEXPORT jstring JNICALL Java_com_hm_hello_CActivityMain_stringFromJNI
    (JNIEnv* env, jobject)
    {
       jstring str;
       jclass java_class = env->FindClass("com/hm/hello/CForCall");
        if (java_class == 0)
        {
           return env->NewStringUTF("not find class!");
        }
       jobject java_obj = getInstance(env, java_class);
       if (java_obj == 0)
       {
           return env->NewStringUTF("not find java OBJ!");
       }
       jmethodID java_method = env->GetMethodID(java_class, "GetJavaString", "()Ljava/lang/String;");
       if(java_method == 0)
       {
           return env->NewStringUTF("not find java method!");
       }
       str = (jstring)env->CallObjectMethod(java_obj, java_method);
       return str;
    }
    看完了構造函數(shù)的介紹,這段代碼其實很容易就看懂了,我們發(fā)現(xiàn)調用java中的函數(shù)的步驟無非幾步:
    1找到類句柄
    2找到類的方法的句柄
    3實例化類
    4調用實例化類的方法。
    而以上代碼中只有一段沒說過,就是
    jclass java_class = env->FindClass("com/hm/hello/CForCall");
    看名字就知道,是在找相應的類的句柄,其中com.hm.hello準備調用類的完整包名(把.轉換為/),而CforCall就是我們要調用的類的名稱。
    至此,編譯,然后在Android調試,可愛的機器人又出現(xiàn)了,哈哈,屏幕上顯示出現(xiàn)了12345,成功!

    共1 條記錄, 每頁顯示 10 條, 頁簽: [1]

    Copyright © 2000 - 2009 曙海教育集團
    Powered By 曙海教育集團 Version 2.2
    Processed in .01563 s, 2 queries.
    主站蜘蛛池模板: 扒开两腿猛进入爽爽视频| 一个人看的视频www在线| 综合久久久久久中文字幕| 奶大灬舒服灬太大了一进一出| 亚洲人成在线免费观看| 波多野结衣一区二区三区高清av | 精品久久久久香蕉网| 国产美女被爆羞羞视频| 中文字幕免费在线看线人 | 中文精品久久久久国产网站| 毛片网站在线观看| 国产69精品久久久久777| 鲁啊鲁视频在线精品| 国产高清精品入口91| 久久精品亚洲欧美va| 欧美人与z0xxx另类| 国产99久久久久久免费看| 高清性色生活片欧美在线| 国产精品电影久久久久电影网| 久久久受www免费人成| 最新国产福利在线观看| 亚洲精品tv久久久久久久久久| 真实国产精品视频国产网| 国产精品va在线播放| 中文字幕中文字字幕码一二区| 欧洲美熟女乱又伦av影片| 免费99精品国产自在现线| 调教女m视频免费区| 国产精品国产国产aⅴ| 中文无码热在线视频| 日本道在线观看| 亚洲区小说区图片区qvod| 欧美日韩在线视频一区| 国产一区二区三区影院| 99久久免费精品国产72精品九九| 好男人好资源影视在线| 久久99久久精品视频| 最近中文字幕免费高清mv| 亚洲精品乱码久久久久久下载 | 韩国福利视频一区二区| 国产精品无码av在线播放|