पर जेएनआई के साथ सी और जावा के बीच एक जटिल संरचना को कैसे पास किया जाए मेरे पास मेरे एंड्रॉइड एप्लिकेशन पर सी कोड में एक जटिल strucutre है और मैं इसे जावा पक्ष में उपयोग करना चाहता हूं। मैंने Google और stackoverflow के साथ कुछ शोध किया है, इसलिए मैंने अपने सी strucutre से जावा क्लास बनाया है, लेकिन अब जावा में इसे कैसे प्राप्त करें।एंड्रॉइड एनडीके
मैं इन जानकारियां मिल गया है, कक्षा में एक सूचक बनाने और सी पक्ष पर इस का उपयोग के बारे में:
Get the field ID : (*env)->GetFieldID(...)
Get the pointer : (*env)->GetLongField(...)
Set the pointer : (*env)->SetLongField(...)
लेकिन मुझे समझ नहीं आता कि कैसे यह वास्तव में काम करता है ...
ऊपर, आप अब तक जो कुछ भी कर चुके हैं वह पा सकते हैं ... इतना नहीं! सी तरफ:
ComplexStructure Java_com_main_MainActivity_listenUDP(JNIEnv* env, jclass clazz)
{
int i,taille;
ComplexStructure myStruct;
taille = -1;
taille = recvfrom(socket, &myStruct, sizeof(ComplexStructure), 0, &rcvAddr, &sizeOfSock);
if(taille != -1)
{
return myStruct;
}
return NULL;
}
और जावा की ओर:
public void getFromUDP() {
ComplexClass myClass = new ComplexClass();
myClass = listenUDP();
}
@Override
public void run() {
initUDP();
getFromUDP();
}
public static native ComplexClass listenUDP();
public static native void initUDP();
public static native void closeUDP();
/** Load jni .so on initialization */
static {
System.loadLibrary("native-interface");
}
संपादित करें: मैं जोड़ने के लिए है कि मेरे संरचना इस तरह बहुत जटिल है चाहते हैं:
typedef struct{
TYPE_A myStructA;
TYPE_B myStructB;
TYPE_C myStructC;
TYPE_D myStructD;
}ComplexStructure;
typedef struct{
float rad;
int size;
bool isEmpty;
}TYPE_A;
typedef struct{
float rad;
bool isEmpty;
float color;
int temp;
}TYPE_B;
typedef struct{
int temp;
float rain;
bool isEmpty;
}TYPE_C;
typedef struct{
float rad;
int idPerson;
bool isOnTime;
}TYPE_D;
इससे भी अधिक जटिल, यह दिखाने के लिए सिर्फ एक उदाहरण है कि यह कैसा है!
ठीक है, आपके उत्तर के लिए बहुत बहुत धन्यवाद, यह बहुत उपयोगी है। जैसा कि आप कहते हैं, यह बहुत जटिल है, मैंने सोचा था कि संरचना को कक्षा में आसानी से प्रतिलिपि बनाना संभव था, लेकिन ऐसा नहीं है ... क्योंकि मेरी संरचना में बहुत सारी वस्तुएं/फ़ील्ड हैं, इसलिए यदि मुझे मैन्युअल रूप से सभी पैरामीटर जोड़ना है, तो मैं इस पर दिन गुजरेंगे। तो, जावा में सीधे मेरे सी अनुप्रयोग से यूडीपी पैकेट प्राप्त करना सबसे आसान है ?? बहुत बहुत धन्यवाद @ जकूब ज़वेर्का – Bibu
@ मार्टिन डेटाग्राम पर एक नज़र डालें: http://docs.oracle.com/javase/tutorial/networking/datagrams/index.html –
हाँ मुझे पता है कि डेटाग्राम सॉकेट और डेटाग्राम पैकेट का उपयोग कैसे करें, लेकिन मुझे नहीं पता कि मेरे डेटा वापस कैसे प्राप्त करें :), स्ट्रिंग के लिए यह काफी सरल है, लेकिन संरचना के लिए ... – Bibu