JNI Okhttp inner class method with NoSuchMethodError

171 Views Asked by At

I am trying to access OkHttpClient.Builder method using builder object but I am getting java.lang.NoSuchMethodError exception in Android.

Here is my code

//okHttpClient
    jclass okHttpClassBuilderClass =env->FindClass("okhttp3/OkHttpClient$Builder");
    jmethodID initBuilder =  env->GetMethodID(okHttpClassBuilderClass, "<init>", "()V");
    jobject okHttpClassBuilder = env->NewObject(okHttpClassBuilderClass, initBuilder);

    jclass timeUnitClass = env->FindClass("java/util/concurrent/TimeUnit");
    jfieldID timeUnitClassMethod =  env->GetStaticFieldID(timeUnitClass, "MILLISECONDS", "Ljava/util/concurrent/TimeUnit;");
    jobject timeUnitObject = env->GetStaticObjectField(timeUnitClass,timeUnitClassMethod);

    jlong timeout =5000;
    jmethodID setConnTimeoutMethod = env->GetMethodID(okHttpClassBuilderClass, "connectTimeout", "(J;Ljava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;");
    okHttpClassBuilder =env->CallObjectMethod(okHttpClassBuilder,setConnTimeoutMethod,timeout,timeUnitObject);

Here is error

JNI DETECTED ERROR IN APPLICATION: JNI CallObjectMethodV called with pending exception java.lang.NoSuchMethodError: no non-static method "Lokhttp3/OkHttpClient$Builder;.connectTimeout(J;Ljava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;"

In error I am getting error like JNI CallObjectMethodV called but in code I am using CallObjectMethod

What I am missing here ?

1

There are 1 best solutions below

6
On

Not an expert here, but javap suggests you have an additional ;

  public final okhttp3.OkHttpClient$Builder connectTimeout(long, java.util.concurrent.TimeUnit);
    descriptor: (JLjava/util/concurrent/TimeUnit;)Lokhttp3/OkHttpClient$Builder;