Chaquopy и android: интерактивный диалогJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Chaquopy и android: интерактивный диалог

Сообщение Anonymous »

Я уже некоторое время пытался реализовать эту функциональность, но все мои подходы не увенчались успехом.
Мне хотелось бы, чтобы код Python открывал диалоговое окно в приложении Android и ждал пользователю нажать кнопку "ОК" (это первый шаг, который я хочу выполнить, прежде чем смогу создавать более сложные диалоговые окна ДА/НЕТ).
Пока единственное поведение, которое я могу для получения - это неблокирующий диалог, независимо от того, что я пытаюсь (сигналы, сокеты, общие переменные), но кажется, что диалог не отображается до тех пор, пока код Python не завершит свое выполнение.
вот мой пример, в котором используется глобальная переменная для подтверждения того, что пользователь закрыл диалоговое окно:
Python

Код: Выделить всё

from java import dynamic_proxy, jboolean, jvoid, Override, static_proxy
from java.lang import Runnable
from com.chaquo.python import Python
from android.app import AlertDialog
from android.content import DialogInterface
import threading

state_done = False

def open_dialog(activity):
def show_dialog():
print('Dialog shown')
builder = AlertDialog.Builder(activity)
builder.setTitle("Title")
builder.setMessage("This is a simple dialog from Python!")

class Listener(dynamic_proxy(DialogInterface.OnClickListener)):
def onClick(self, dialog, which):
print("OK button pressed")
state_done = True

listener = Listener()

builder.setPositiveButton("OK", listener)
dialog = builder.create()
dialog.show()
print('Dialog shown')

class R(dynamic_proxy(Runnable)):
def run(self):
show_dialog()

def dummy():
activity.runOnUiThread(R())

dialog_thread = threading.Thread(target=dummy)
dialog_thread.start()
dialog_thread.join()
while not state_done:
pass
print('done')
Java

Код: Выделить всё

if (!Python.isStarted()) {
Python.start(new AndroidPlatform(this));
}
Python py = Python.getInstance();
PyObject pyObject = py.getModule("your_script");
pyObject.callAttr("open_dialog", this);
несколько примечаний: с помощью этого кода печать никогда не выполняется, как будто show_dialog вообще никогда не вызывается, нет шансов, что что-нибудь отобразится. Если я удалю цикл while, все отпечатки будут выполнены в следующем порядке:

Код: Выделить всё

I/python.stdout: done
I/python.stdout: show_dialog
I/python.stdout: Dialog shown
*here i press the ok button*
I/python.stdout: OK button pressed
I/python.stdout: dismissed
Есть ли способ создать диалог блокировки, который напрямую взаимодействует с Python? косвенные решения также приветствуются, но даже с обратными вызовами Java я получаю такое же поведение.

Подробнее здесь: https://stackoverflow.com/questions/786 ... ive-dialog
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»