Pyjnius: Ausnahme beim Aufrufen von PythonActivity.getWindow().setSoftInputMode(...)

Erstellt am 22. März 2019  ·  5Kommentare  ·  Quelle: kivy/pyjnius

Ich erhalte einen Pyjnius-Fehler mit vielen Zugriffen auf Klassenmethoden, von denen ich erwarte, dass sie funktionieren:

Traceback (most recent call last):
  File "jnius/jnius_export_class_pxi", line 752, in jnius.jnius.JavaMethod.__call__
  File "jnius/jnius_export_class.pxi", line 699, in jnius.jnius.JavaMethod.ensure_method
jnius.jnius.JavaException: Unable to find a None method!

Schritte zum Reproduzieren:

  1. Erstellen Sie einen neuen Ordner mit diesem main.py :
from jnius import autoclass
python_activity = autoclass('org.kivy.android.PythonActivity')
window = python_activity.getWindow()
window.setSoftInputMode(16)  # SOFT_INPUT_ADJUST_RESIZE
  1. Paket als .apk :
    p4a apk --arch=armeabi-v7a --name test --package com.example.test --version 1 --requirements=kivy,python2 --private . (oder Python 3, möglicherweise müssen Sie api- und/oder ndk-api-Argumente hinzufügen, wenn diese nicht in Ihrem Pfad festgelegt sind)

  2. Führen Sie es aus und warten Sie, bis es sofort beendet wird, und überprüfen Sie dann logcat. Sie werden Folgendes sehen:

Traceback (most recent call last):
  File "jnius/jnius_export_class_pxi", line 752, in jnius.jnius.JavaMethod.__call__
  File "jnius/jnius_export_class.pxi", line 699, in jnius.jnius.JavaMethod.ensure_method
jnius.jnius.JavaException: Unable to find a None method!

Hilfreichster Kommentar

Schließen als kein Fehler in Pyjnius, bitte kommentieren oder erneut öffnen, wenn Sie der Meinung sind, dass dies falsch ist.

Alle 5 Kommentare

Ok, ich habe ein gutes altes Druck-Debugging durchgeführt und die genaue abstürzende Zeile ist window = python_activity.getWindow() oder in größerem Zusammenhang:

https://github.com/wobblui/wobblui/blob/653d6db66f60b3bc4165e68440ddfbe8d1460904/src/wobblui/sdlinit.pyx#L60

Mir fällt jedoch kein Fall ein, in dem Activity (von dem PythonActivity / SDLActivity abgeleitet sind) nicht getWindow() hätte, wie hier dokumentiert: https://developer.android.com/reference/android/app/Activity#getWindow ()

Ist das dann ein Bug?

FWIW, lief auf den gleichen Fehler mit https://github.com/kivy/python-for-android/pull/1772 . Hat jemand eine Ahnung, ob dies ein Pyjnius-Fehler oder ein Benutzerfehler auf meiner Seite ist?

Der Fehler hier ist das Aufrufen der Methode für die Aktivitätsklasse, nicht für die Instanz. Auf die Instanz kann über das Attribut mActivity zugegriffen werden.

Hier ist ein funktionierendes Codebeispiel https://gist.github.com/47b7b18855b38de3730e081682c558ce

hoffentlich erreicht es das, was du zu tun versuchst :).

Schließen als kein Fehler in Pyjnius, bitte kommentieren oder erneut öffnen, wenn Sie der Meinung sind, dass dies falsch ist.

@tshirtman :ballon: :tada: danke :herz:

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen