使用Python和jnius在Android上显示Toast时出错

时间:2014-10-06 07:56:21

标签: android python pyjnius

我试图在QPython上使用jnius显示toast消息。我无法使用Py4A库,因为最终结果应该在没有SL4A库的Kivy应用程序中运行。

from jnius import autoclass

activity = autoclass("org.renpy.android.PythonActivity").mActivity
toaster = autoclass("android.widget.Toast")

toast = toaster.makeText(activity.getApplicationContext(), "I'm a Toast", toaster.LENGTH_SHORT)
toast.show()

但是,我得到jnius.jnius.JavaException: No methods matching your arguments

如何使用jnius正确使用Toast通知?

3 个答案:

答案 0 :(得分:3)

我知道这个问题很老,但也许这会帮助其他人。 第一个问题是因为您发送一个字符串作为参数,但您需要发送java.lang.CharSequence。你可以使用jnius.cast来做到这一点。 下一个技巧是使用runOnUIThread,但是对于快速吐司,你可以简单地使用它:

from jnius import autoclass
PythonActivity = autoclass('org.renpy.android.PythonActivity')
PythonActivity.toastError("Hello!")

最好的问候!,

塞巴斯蒂安

答案 1 :(得分:0)

为什么不简单地在Kivy中创建弹出窗口,将其打包为Android&看看它是否有效,如果你打算使用Kivy呢?您还可以使用Kivy中包含的漂亮的Plyer API通过Pyjnius在Android上发送通知:在这里http://kivy.org/docs/guide/android.htmlhttps://plyer.readthedocs.org/en/latest/

答案 2 :(得分:0)

makeToast使用CharSequence而不是String,您需要像这样将String强制转换为CharSequence:

from jnius import autoclass, cast
PythonActivity = autoclass("org.kivy.android.PythonActivity")
context = PythonActivity.mActivity
AndroidString = autoclass('java.lang.String')
Toast = autoclass('android.widget.Toast')
duration = Toast.LENGTH_SHORT
text='Hello Toast!'
text_char_sequence = cast('java.lang.CharSequence', AndroidString(text))
toast = Toast.makeText(context, text_char_sequence, duration)
toast.show()