反射調用Java層方法

在底層C代碼中反射獲取Java層字段的值的基礎上,咱們繼續學習反射調用Java層方法,進一步完善登陸功能。java

一:在LoginActivity中定義兩個方法

打開eclipse工具,找到上節課建立好的「yijindaxue」工程,在工程中依次找到「src」=>「com.yijindaxue」目錄下「LoginActivity.java」文件,雙擊打開該文件。windows

在該文件中添加兩個方法,以下圖所示:eclipse

第一個方法:userError用於提示用戶輸入的帳號錯誤。ide

第二個方法:pwdError用於提示用戶輸入的密碼錯誤。函數

反射調用Java層方法

二:編寫C代碼

1.在「yijindaxue」工程中找到「jni」目錄下的「yijindaxue.c」文件,雙擊打開該文件。工具

2.在「yijindaxue.c」文件中找到Java_com_yijindaxue_LoginActivity _login函數,完善該函數的登陸功能,以下圖所示:學習

(1)調用strcmp函數來比較用戶輸入的帳號是否正確,若是不正確則經過反射調用Java層的成員方(userError),提示用戶輸入的帳號錯誤。ui

第一步:調用GetMethodID函數獲取Java層成員方法的ID。
第二步:使用CallVoidMethod函數調用Java層成員方法。blog

(2)調用strcmp函數來比較用戶輸入的密碼是否正確,若是不正確則經過反射調用Java層的靜態方(pwdError),提示用戶輸入的密碼錯誤。ip

第一步:調用GetStaticMethodID函數獲取Java層靜態方法的ID。
第二步:使用CallStaticVoidMethod函數調用Java層靜態方法。

反射調用Java層方法

三: 編譯動態連接庫

在「yijindaxue」工程下選中jni目錄右鍵選擇最後一項properties,點擊該選項彈出彈窗,複製Location對應的值,就是文件路徑D:\Android\data \yijindaxue\jni,複製成功後關閉對話框,以下圖所示:

反射調用Java層方法

點擊左下角「windows」圖標,輸入「cmd」命令打開窗口,輸入「D:」切換到D盤,而後執行命令「cd D:\Android\data\yijindaxue\jni」進入jni目錄,緊接着執行「ndk-build」命令生成動態連接庫「.so」文件,以下圖所示:

反射調用Java層方法

四:運行應用程序

打開雷電模擬器運行應用程序:選中「yijindaxue」工程=>右鍵選擇Run As選項=> 點擊Android Application。

小結:

主要學習了反射調用Java層方法,完善登陸功能,步驟以下:

一、在LoginActivity中定義userError和pwdError兩個方法,用於提示用戶輸入的帳號和密碼是否正確。

二、編寫C代碼,反射調用Java層方法。

(1)反射調用成員方法。
第一步:調用GetMethodID函數獲取Java層成員方法的ID。
第二步:使用CallVoidMethod函數調用Java層成員方法。

(2)反射調用靜態方法。
第一步:調用GetStaticMethodID函數獲取Java層靜態方法的ID。
第二步:使用CallStaticVoidMethod函數調用Java層靜態方法。

三、使用NDK工具編譯.c文件生成動態連接庫.so文件。

四、運行應用程序。

相關文章
相關標籤/搜索