Hi,all.I try to call java method in C,Here is my code:
LOGI("TOGetContractName");
jclass act_class = (*env)->FindClass(env,"android/app/ Activity");
if(act_class == 0)
LOGI("Can't find act_class");
else LOGI("Find act_class success!");
jobject act_obj = getInstance(env, act_class);
if(act_obj == 0)
LOGI("Can not find act_obj!");
else LOGI("Create act_obj success!");
jmethodID act_method = (*env)- >GetMethodID(env,act_class,"getContentResolver",()Landroid/content/ContentResolver;");
if(act_method == 0)
LOGI("Can't find getCR method");
else LOGI("Create CR method success !");
(*env)->CallObjectMethod(env,act_obj,act_method); And the logs are:
I/Test ( 862): TOGetContractName
I/Test ( 862): Find act_class success!
I/Test ( 862): Create act_obj success!
I/Test ( 862): Create CR method success !
W/dalvikvm( 862): JNI WARNING: JNI method called with exception
raised
W/dalvikvm( 862): in Lcom/example/Test;.GetContractName
()Ljava/lang/String; (NewStringUTF)
W/dalvikvm( 862): Pending exception is:
I/dalvikvm( 862): Ljava/lang/NullPointerException;:
I/dalvikvm( 862): at
android.content.ContextWrapper.getContentResolver(ContextWrapper.java: 90)
I/dalvikvm( 862): at com.example.Test.GetContractName(Native Method)
I/dalvikvm( 862): at com.example.Test.onCreate(Test.java:16)
I/dalvikvm( 862): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047)
I/dalvikvm( 862): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 1611)
I/dalvikvm( 862): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 1663)
I/dalvikvm( 862): at android.app.ActivityThread.access $1500(ActivityThread.java:117)
I/dalvikvm( 862): at android.app.ActivityThread $H.handleMessage(ActivityThread.java:931)
I/dalvikvm( 862): at android.os.Handler.dispatchMessage(Handler.java: 99)
I/dalvikvm( 862): at android.os.Looper.loop(Looper.java:123) I/dalvikvm( 862): at android.app.ActivityThread.main(ActivityThread.java:3683)
I/dalvikvm( 862): at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm( 862): at java.lang.reflect.Method.invoke(Method.java: 507)
I/dalvikvm( 862): at com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:839)
I/dalvikvm( 862): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
I/dalvikvm( 862): at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm( 862): "main" prio=5 tid=1 NATIVE As we can see,the problem exits in: (*env)- >CallObjectMethod(env,act_obj,act_method);
But I can't know why.
Here is my guess:
Class Activity extends ContextThemeWrapper,and ContextThemeWrapper
extends ContextWrapper,but I create an Activity obj,it can't call
ContextWrapper.getContentResolver method.
Waiting for help.
Thanks.
LOGI("TOGetContractName");
jclass act_class = (*env)->FindClass(env,"android/app/ Activity");
if(act_class == 0)
LOGI("Can't find act_class");
else LOGI("Find act_class success!");
jobject act_obj = getInstance(env, act_class);
if(act_obj == 0)
LOGI("Can not find act_obj!");
else LOGI("Create act_obj success!");
jmethodID act_method = (*env)- >GetMethodID(env,act_class,"getContentResolver",()Landroid/content/ContentResolver;");
if(act_method == 0)
LOGI("Can't find getCR method");
else LOGI("Create CR method success !");
(*env)->CallObjectMethod(env,act_obj,act_method); And the logs are:
I/Test ( 862): TOGetContractName
I/Test ( 862): Find act_class success!
I/Test ( 862): Create act_obj success!
I/Test ( 862): Create CR method success !
W/dalvikvm( 862): JNI WARNING: JNI method called with exception
raised
W/dalvikvm( 862): in Lcom/example/Test;.GetContractName
()Ljava/lang/String; (NewStringUTF)
W/dalvikvm( 862): Pending exception is:
I/dalvikvm( 862): Ljava/lang/NullPointerException;:
I/dalvikvm( 862): at
android.content.ContextWrapper.getContentResolver(ContextWrapper.java: 90)
I/dalvikvm( 862): at com.example.Test.GetContractName(Native Method)
I/dalvikvm( 862): at com.example.Test.onCreate(Test.java:16)
I/dalvikvm( 862): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java: 1047)
I/dalvikvm( 862): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java: 1611)
I/dalvikvm( 862): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java: 1663)
I/dalvikvm( 862): at android.app.ActivityThread.access $1500(ActivityThread.java:117)
I/dalvikvm( 862): at android.app.ActivityThread $H.handleMessage(ActivityThread.java:931)
I/dalvikvm( 862): at android.os.Handler.dispatchMessage(Handler.java: 99)
I/dalvikvm( 862): at android.os.Looper.loop(Looper.java:123) I/dalvikvm( 862): at android.app.ActivityThread.main(ActivityThread.java:3683)
I/dalvikvm( 862): at java.lang.reflect.Method.invokeNative(Native Method)
I/dalvikvm( 862): at java.lang.reflect.Method.invoke(Method.java: 507)
I/dalvikvm( 862): at com.android.internal.os.ZygoteInit
$MethodAndArgsCaller.run(ZygoteInit.java:839)
I/dalvikvm( 862): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
I/dalvikvm( 862): at dalvik.system.NativeStart.main(Native Method)
I/dalvikvm( 862): "main" prio=5 tid=1 NATIVE As we can see,the problem exits in: (*env)- >CallObjectMethod(env,act_obj,act_method);
But I can't know why.
Here is my guess:
Class Activity extends ContextThemeWrapper,and ContextThemeWrapper
extends ContextWrapper,but I create an Activity obj,it can't call
ContextWrapper.getContentResolver method.
Waiting for help.
Thanks.
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货