在方法调用中将POJO从C发送到Java

时间:2015-04-13 15:43:30

标签: java android java-native-interface

我目前正在使用JNI,我需要将Java对象从C层传递到Java层。 但我不确定这种方法是否正确。

我有一个包含地理位置数据的Java POJO或模型类:

public class Geoloc{
 private double latitude;
 pivate double longitude;
 public Geoloc(double latitude, double longitude){
   this.longitude = longitude;
   this.latitude = latitude;
 }
 public double getLatitude(){
    return this.latitude;
 }
 public double getLongitude(){
    return this.longitude;
 }

 public void setLatitude(double lat){
  this.latitude = lat;
 }
 public void setLongitude(double longitude){
  this.longitude = longitude;
 }
}

我的C功能看起来像

void jni_inc_msg_ind_cbk(...)
{

jclass c = (*envPtr)->FindClass(envPtr, "com/my/geoloc/Geoloc");
        if (c == 0) {
            ret_val = 0;
        }else{
            printf("Found class.\n");
        }
        cnstrctr = (*envPtr)->GetMethodID(envPtr, c, "<init>", "(DD)V");
        jgeoloc = (*envPtr)->NewObject(envPtr, c, cnstrctr, jlatitude, 

jlongitude);
incChatMethodId = (*envPtr)->GetMethodID(envPtr,ojb, "incChatSessInd",
            "????");
            (*envPtr)->CallVoidMethod(envPtr, p_pdb->objct, incChatMethodId,jgeoloc);
    }

所以我的问题是以下两个语句是一个有效的调用,还有什么是需要传递以取代的确切参数&#34; ????&#34;

incChatSessIndMethodId = (*envPtr)->GetMethodID(envPtr,ojb, "incChatSessInd",
            "????");
 (*envPtr)->CallVoidMethod(envPtr, p_pdb->objct, incChatSessIndMethodId,jgeoloc);

如果我无法使用java pojo参数调用java方法,我需要在实际实现中添加大约20个参数。这将是非常古怪的。

0 个答案:

没有答案