欧美自拍小视频_国产片在线免费观看_中文字幕啪啪_成人av高清在线_欧美一区二区视频免费观看_亚洲国产激情

以文本方式查看主題

-  曙海教育集團(tuán)論壇  (http://www.rfoamep.cn/bbs/index.asp)
--  Android應(yīng)用開發(fā)  (http://www.rfoamep.cn/bbs/list.asp?boardid=45)
----  Android學(xué)習(xí)開發(fā)4--Android在C++中調(diào)用java(3)  (http://www.rfoamep.cn/bbs/dispbbs.asp?boardid=45&id=2037)

--  作者:wangxinxin
--  發(fā)布時間:2010-12-3 11:51:12
--  Android學(xué)習(xí)開發(fā)4--Android在C++中調(diào)用java(3)

5.2 java類的實例化
都知道java需要 obj var = new obj();這樣一個過程,我們在C++中調(diào)用java類的成員函數(shù),當(dāng)然也要先示例話一個類。
示例化的函數(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類中某個方法的句柄,有一點需要特別注意的,在獲取構(gòu)造方法的句柄和別的方法的句柄是不一樣的。
獲取一般方法的句柄所填寫“方法名稱”參數(shù)直接就是這個方法的名稱,而構(gòu)造函數(shù)的話就必須填寫"<init>"。除了這點區(qū)別外,就沒有區(qū)別了。
而我們的“參數(shù)名稱”似乎寫的就有些奇怪了。但是細(xì)說下他的規(guī)律也就不怪了。
參數(shù)名稱的書寫規(guī)則為 (參數(shù)1類型,參數(shù)2類型….)返回類型。而相應(yīng)類型的表示如下所示
圖片點擊可在新窗口打開查看

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

5.3 調(diào)用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;
}
看完了構(gòu)造函數(shù)的介紹,這段代碼其實很容易就看懂了,我們發(fā)現(xiàn)調(diào)用java中的函數(shù)的步驟無非幾步:
1找到類句柄
2找到類的方法的句柄
3實例化類
4調(diào)用實例化類的方法。
而以上代碼中只有一段沒說過,就是
jclass java_class = env->FindClass("com/hm/hello/CForCall");
看名字就知道,是在找相應(yīng)的類的句柄,其中com.hm.hello準(zhǔn)備調(diào)用類的完整包名(把.轉(zhuǎn)換為/),而CforCall就是我們要調(diào)用的類的名稱。
至此,編譯,然后在Android調(diào)試,可愛的機(jī)器人又出現(xiàn)了,哈哈,屏幕上顯示出現(xiàn)了12345,成功!


主站蜘蛛池模板: 国产一区二 | 欧美日韩一区二区视频免费看 | 日韩不卡视频在线观看 | 国产偷啪| 强制高潮18xxxxhd日韩 | 免费看污片的网站 | 日韩精品高清在线 | 国内精品久久久久激情影院 | 久热精品在线观看 | 黄色小说软件 | 国产又色又爽又刺激在线播放 | 国产乱子伦精品免费女 | 国产人成视频在线视频 | 青草青草久热精品视频在线观看 | 亚洲无限乱码一二三四区 | 久热国产精品视频 | 国产麻豆媒一区一区二区三区 | 国产午夜三级一区二区三 | 日日夜夜综合网 | 手机在线亚洲 | 社区天堂 | 亚洲第一视频 | 青青在线久青草免费观看 | 视频福利网站 | 尤物视频在线网站 | 天堂网www在线中文天堂 | 亚洲av无码一区二区二三区入口 | 老色鬼久久亚洲av综合 | 天天干天天操天天拍 | 欧美一级在线全免费 | 国产日产韩国精品视频 | 亚洲级αv无码毛片久久精品 | 国产美女作爱全过程免费视频 | 浪荡女天天不停挨cao日常视频 | 免费观看又污又黄的网站 | 欧美日韩国产成人精品 | 男女午夜爱爱久久无遮挡 | 精品一区二区三区免费播放 | a级毛片网站 | 成人午夜视频一区二区国语 | 日韩一区二区三区在线免费观看 |