在底層C代碼中反射獲取Java層字段的值的基礎上,咱們繼續學習反射調用Java層方法,進一步完善登陸功能。java
打開eclipse工具,找到上節課建立好的「yijindaxue」工程,在工程中依次找到「src」=>「com.yijindaxue」目錄下「LoginActivity.java」文件,雙擊打開該文件。windows
在該文件中添加兩個方法,以下圖所示:eclipse
第一個方法:userError用於提示用戶輸入的帳號錯誤。ide
第二個方法:pwdError用於提示用戶輸入的密碼錯誤。函數
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層靜態方法。
在「yijindaxue」工程下選中jni目錄右鍵選擇最後一項properties,點擊該選項彈出彈窗,複製Location對應的值,就是文件路徑D:\Android\data \yijindaxue\jni,複製成功後關閉對話框,以下圖所示:
點擊左下角「windows」圖標,輸入「cmd」命令打開窗口,輸入「D:」切換到D盤,而後執行命令「cd D:\Android\data\yijindaxue\jni」進入jni目錄,緊接着執行「ndk-build」命令生成動態連接庫「.so」文件,以下圖所示:
打開雷電模擬器運行應用程序:選中「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文件。
四、運行應用程序。