久久中文视频-久久中文网-久久中文亚洲国产-久久中文字幕久久久久-亚洲狠狠成人综合网-亚洲狠狠婷婷综合久久久久


曙海教育集團(tuán)論壇3G手機(jī)技術(shù)專區(qū)Android應(yīng)用開發(fā) → Android學(xué)習(xí)開發(fā)4--Android在C++中調(diào)用java(3)


  共有7768人關(guān)注過(guò)本帖樹形打印

主題:Android學(xué)習(xí)開發(fā)4--Android在C++中調(diào)用java(3)

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個(gè)性首頁(yè) | 博客 | 信息 | 搜索 | 郵箱 | 主頁(yè) | UC


加好友 發(fā)短信
等級(jí):青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊(cè):2010-11-12 11:08:23
Android學(xué)習(xí)開發(fā)4--Android在C++中調(diào)用java(3)  發(fā)帖心情 Post By:2010-12-3 11:51:12

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

比如我們要找個(gè)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í)例被該函數(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ù)的介紹,這段代碼其實(shí)很容易就看懂了,我們發(fā)現(xiàn)調(diào)用java中的函數(shù)的步驟無(wú)非幾步:
1找到類句柄
2找到類的方法的句柄
3實(shí)例化類
4調(diào)用實(shí)例化類的方法。
而以上代碼中只有一段沒(méi)說(shuō)過(guò),就是
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)試,可愛(ài)的機(jī)器人又出現(xiàn)了,哈哈,屏幕上顯示出現(xiàn)了12345,成功!


支持(0中立(0反對(duì)(0單帖管理 | 引用 | 回復(fù) 回到頂部

返回版面帖子列表

Android學(xué)習(xí)開發(fā)4--Android在C++中調(diào)用java(3)








簽名
主站蜘蛛池模板: 久久国产精品久久精品国产 | 一区二区三区在线免费观看视频 | 国产精品18久久久久久久久久 | 国内成人自拍 | 美女又黄又免费视频 | 久久成人精品免费播放 | 一级一级特黄女人精品毛片 | 国产精品三级a三级三级午夜 | 无码精品一区二区三区免费视频 | 亚洲精品一区二区三区网址 | 另类一区二区三区 | 日本一二线不卡在线观看 | 99国产高清久久久久久网站 | 亚洲天堂网视频 | 日本国产免费一区不卡在线 | 精品久久久久久国产免费了 | 欧美在线亚洲国产免m观看 欧美在线一级精品 | 成年人www | 日本在线www | 欧美日韩高清不卡一区二区三区 | 黄a一级 | 国产在线精品成人一区二区三区 | 日韩欧美一及在线播放 | 欧美成人精品 | 最新国产午夜精品视频不卡 | aa国产| 中文字幕一区视频一线 | 在线观看日本亚洲一区 | 亚洲在线播放视频 | 91精品福利手机国产在线 | 91精品欧美综合在线观看 | 有码视频在线观看 | 国产精品免费大片 | 成年免费大片黄在线观看一 | 国产成人高清在线观看播放 | 欧美成人做性视频在线播放 | 久草中文网 | 国产精品亚洲高清一区二区 | 国产成人一区二区三区精品久久 | 中国女人真人一级毛片 | 精品国产综合区久久久久99 |