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

    曙海教育集團論壇3G手機技術專區Android應用開發 → Android學習開發4--Android在C++中調用java(3)


      共有7148人關注過本帖樹形打印

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

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


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

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

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

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


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

    返回版面帖子列表

    Android學習開發4--Android在C++中調用java(3)








    簽名
    主站蜘蛛池模板: 国产成人精品福利网站在线 | 久久成人午夜电影mp4| 波多野结衣99| 国产va欧美va在线观看| 18禁止看的免费污网站| 天天av天天翘天天综合网| 久久久国产99久久国产久| 本子库全彩时间暂停| 亚洲黄色在线看| 精品久久久久久无码人妻蜜桃| 国产成人亚洲综合色影视| 99久久人人爽亚洲精品美女| 婷婷五月综合缴情在线视频| 久久国产美女免费观看精品| 最近中文字幕2018| 亚洲熟妇无码乱子av电影| 男女啪啪漫画无遮挡全彩| 国产人妖xxxx做受视频| 1024香蕉视频| 国产鲁鲁视频在线播放| 一级性生活毛片| 成年在线观看免费人视频草莓| 亚洲gv天堂gv无码男同| 欧美日韩视频精品一区二区 | 国产白嫩美女在线观看| sihu国产精品永久免费| 成人在线免费视频| 久久精品国产日本波多野结衣| 欧美亚洲国产第一页草草| 人妻少妇精品视频一区二区三区| 精品午夜福利1000在线观看| 国产交换配乱婬视频| 香蕉高清免费永久在线视频| 国产精品欧美一区二区在线看| 一个人看的www在线免费视频| 成人AAA片一区国产精品| 久久人妻av无码中文专区| 日韩人妻无码中文字幕视频 | 国产午夜无码福利在线看网站| 77777_亚洲午夜久久多人| 国内精品区一区二区三|