Skip to content

Commit 629d4ee

Browse files
committed
fixes, Hardware.getDPI() is working! :)
1 parent 1aedc08 commit 629d4ee

File tree

1 file changed

+35
-19
lines changed

1 file changed

+35
-19
lines changed

recipes/android/src/java.pyx

Lines changed: 35 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -70,10 +70,13 @@ cdef class JavaClass(object):
7070

7171
cdef void resolve_methods(self):
7272
# search all the JavaMethod within our class.
73-
for name, value in self.__dict__.iteritems():
73+
cdef JavaMethod jm
74+
for name in dir(self.__class__):
75+
value = getattr(self.__class__, name)
7476
if not isinstance(value, JavaMethod):
7577
continue
76-
value.resolve_method(self, name)
78+
jm = value
79+
jm.resolve_method(self, name)
7780

7881
cdef int populate_args(self, list definition_args, jvalue *j_args, args):
7982
cdef JavaObject j_object
@@ -137,7 +140,12 @@ cdef class JavaMethod(object):
137140
self.j_env = jc.j_env
138141
self.j_cls = jc.j_cls
139142
self.j_self = jc.j_self
140-
self.j_method = self.j_env[0].GetMethodID(self.j_env, self.j_cls, <char *>name, self.definition)
143+
if self.is_static:
144+
self.j_method = self.j_env[0].GetStaticMethodID(
145+
self.j_env, self.j_cls, <char *>name, self.definition)
146+
else:
147+
self.j_method = self.j_env[0].GetMethodID(
148+
self.j_env, self.j_cls, <char *>name, self.definition)
141149
assert(self.j_method != NULL)
142150

143151
cdef void parse_definition(self, definition):
@@ -203,36 +211,36 @@ cdef class JavaMethod(object):
203211
ret = True if j_boolean else False
204212
elif r == 'B':
205213
j_byte = self.j_env[0].CallByteMethodA(self.j_env, self.j_self, self.j_method, j_args)
206-
self.error_if_null(ret)
214+
#self.error_if_null(ret)
207215
ret = <char>j_byte
208216
elif r == 'C':
209217
j_char = self.j_env[0].CallCharMethodA(self.j_env, self.j_self, self.j_method, j_args)
210-
self.error_if_null(ret)
218+
#self.error_if_null(ret)
211219
ret = <char>j_char
212220
elif r == 'S':
213221
j_short = self.j_env[0].CallShortMethodA(self.j_env, self.j_self, self.j_method, j_args)
214-
self.error_if_null(ret)
222+
#self.error_if_null(ret)
215223
ret = <short>j_short
216224
elif r == 'I':
217225
j_int = self.j_env[0].CallIntMethodA(self.j_env, self.j_self, self.j_method, j_args)
218-
self.error_if_null(ret)
226+
#self.error_if_null(ret)
219227
ret = <int>j_int
220228
elif r == 'J':
221229
j_long = self.j_env[0].CallLongMethodA(self.j_env, self.j_self, self.j_method, j_args)
222-
self.error_if_null(ret)
230+
#self.error_if_null(ret)
223231
ret = <long>j_long
224232
elif r == 'F':
225233
j_float = self.j_env[0].CallFloatMethodA(self.j_env, self.j_self, self.j_method, j_args)
226-
self.error_if_null(ret)
234+
#self.error_if_null(ret)
227235
ret = <float>j_float
228236
elif r == 'D':
229237
j_double = self.j_env[0].CallDoubleMethodA(self.j_env, self.j_self, self.j_method, j_args)
230-
self.error_if_null(ret)
238+
#self.error_if_null(ret)
231239
ret = <double>j_double
232240
elif r == 'L':
233241
# accept only string for the moment
234242
j_object = self.j_env[0].CallObjectMethodA(self.j_env, self.j_self, self.j_method, j_args)
235-
self.error_if_null(ret)
243+
#self.error_if_null(ret)
236244
if r == 'Ljava/lang/String;':
237245
c_str = <char *>self.j_env[0].GetStringUTFChars(self.j_env, j_object, NULL)
238246
py_str = <bytes>c_str
@@ -272,6 +280,14 @@ cdef class JavaMethod(object):
272280
# return type of the java method
273281
r = self.definition_return[0]
274282

283+
'''
284+
print 'TYPE', r
285+
print 'jenv', 'ok' if self.j_env else 'nop'
286+
print 'jcls', 'ok' if self.j_cls else 'nop'
287+
print 'jmethods', 'ok' if self.j_method else 'nop'
288+
print 'jargs', 'ok' if j_args else 'nop'
289+
'''
290+
275291
# now call the java method
276292
if r == 'V':
277293
self.j_env[0].CallStaticVoidMethodA(self.j_env, self.j_cls, self.j_method, j_args)
@@ -280,36 +296,36 @@ cdef class JavaMethod(object):
280296
ret = True if j_boolean else False
281297
elif r == 'B':
282298
j_byte = self.j_env[0].CallStaticByteMethodA(self.j_env, self.j_cls, self.j_method, j_args)
283-
self.error_if_null(ret)
299+
#self.error_if_null(ret)
284300
ret = <char>j_byte
285301
elif r == 'C':
286302
j_char = self.j_env[0].CallStaticCharMethodA(self.j_env, self.j_cls, self.j_method, j_args)
287-
self.error_if_null(ret)
303+
#self.error_if_null(ret)
288304
ret = <char>j_char
289305
elif r == 'S':
290306
j_short = self.j_env[0].CallStaticShortMethodA(self.j_env, self.j_cls, self.j_method, j_args)
291-
self.error_if_null(ret)
307+
#self.error_if_null(ret)
292308
ret = <short>j_short
293309
elif r == 'I':
294310
j_int = self.j_env[0].CallStaticIntMethodA(self.j_env, self.j_cls, self.j_method, j_args)
295-
self.error_if_null(ret)
311+
#self.error_if_null(ret)
296312
ret = <int>j_int
297313
elif r == 'J':
298314
j_long = self.j_env[0].CallStaticLongMethodA(self.j_env, self.j_cls, self.j_method, j_args)
299-
self.error_if_null(ret)
315+
#self.error_if_null(ret)
300316
ret = <long>j_long
301317
elif r == 'F':
302318
j_float = self.j_env[0].CallStaticFloatMethodA(self.j_env, self.j_cls, self.j_method, j_args)
303-
self.error_if_null(ret)
319+
#self.error_if_null(ret)
304320
ret = <float>j_float
305321
elif r == 'D':
306322
j_double = self.j_env[0].CallStaticDoubleMethodA(self.j_env, self.j_cls, self.j_method, j_args)
307-
self.error_if_null(ret)
323+
#self.error_if_null(ret)
308324
ret = <double>j_double
309325
elif r == 'L':
310326
# accept only string for the moment
311327
j_object = self.j_env[0].CallStaticObjectMethodA(self.j_env, self.j_cls, self.j_method, j_args)
312-
self.error_if_null(ret)
328+
#self.error_if_null(ret)
313329
if r == 'Ljava/lang/String;':
314330
c_str = <char *>self.j_env[0].GetStringUTFChars(self.j_env, j_object, NULL)
315331
py_str = <bytes>c_str

0 commit comments

Comments
 (0)