Skip to content

Commit ee425bd

Browse files
committed
implement array of String as return
1 parent 61ff03c commit ee425bd

File tree

1 file changed

+29
-3
lines changed

1 file changed

+29
-3
lines changed

recipes/android/src/java.pyx

Lines changed: 29 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -214,7 +214,12 @@ cdef class JavaClass(object):
214214
cdef jdouble *j_double
215215
cdef object ret = None
216216
cdef jsize array_size
217+
217218
cdef int i
219+
cdef jobject obj
220+
cdef char *c_str
221+
cdef bytes py_str
222+
cdef JavaObject ret_jobject
218223

219224
if j_object == NULL:
220225
return None
@@ -288,9 +293,30 @@ cdef class JavaClass(object):
288293
self.j_env, j_object, j_doubles, 0)
289294

290295
elif r == 'L':
291-
# TODO support list of strings etc...
292-
raise NotImplementedError('Array of Java object not done yet')
293-
296+
ret = []
297+
if definition == 'Ljava/lang/String;':
298+
for i in range(array_size):
299+
obj = self.j_env[0].GetObjectArrayElement(
300+
self.j_env, j_object, i)
301+
if obj == NULL:
302+
ret.append(None)
303+
continue
304+
c_str = <char *>self.j_env[0].GetStringUTFChars(
305+
self.j_env, obj, NULL)
306+
py_str = <bytes>c_str
307+
self.j_env[0].ReleaseStringUTFChars(
308+
self.j_env, j_object, c_str)
309+
ret.append(py_str)
310+
else:
311+
for i in range(array_size):
312+
obj = self.j_env[0].GetObjectArrayElement(
313+
self.j_env, j_object, i)
314+
if obj == NULL:
315+
ret.append(None)
316+
continue
317+
ret_jobject = JavaObject()
318+
ret_jobject.obj = obj
319+
ret.append(ret_jobject)
294320
else:
295321
raise JavaException('Invalid return definition for array')
296322

0 commit comments

Comments
 (0)