Я пытаюсь создать приложение для Android с приложением Quart, работающим на Python с Chaquopy, но как только я добавляю вызов Kotlin из Python, я получаю сообщение об ошибке при запуске сервера Python: невозможно создать обработчик внутри потока Thread[Thread- 4,5,main], который не вызывал Looper.prepare() из MainActivity. Поэтому я добавил вызов Looper, но это дает мне ошибку при запуске сервера Python: метод addObserver должен быть вызван в основном потоке, даже если вызов для запуска приложения Quart находится в потоке, где запускается интерпретатор Python.< /p>
Котлин:
package com.example.chatterbot
import android.annotation.SuppressLint
import android.net.http.SslError
import android.os.Bundle
import android.os.Looper
import android.util.Log
import android.webkit.SslErrorHandler
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chaquo.python.Python
import com.chaquo.python.android.AndroidPlatform
class MainActivity : AppCompatActivity() {
private val tag: String = "MainActivity" // Define a tag for your logs
private var serverPort: Int? = null
private lateinit var webView: WebView
private lateinit var swipeRefreshLayout: SwipeRefreshLayout
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Run the Python server in a background thread
Thread {
Looper.prepare()
Log.i(tag, "Starting server")
Log.i(tag, "IS STARTED")
Log.i(tag, Python.isStarted().toString())
if (! Python.isStarted()) {
Python.start(AndroidPlatform(this))
}
try {
val py = Python.getInstance()
py.getModule("app").callAttr("run")
} catch (e: Exception) {
Log.e(tag, "Error starting Python server: ${e.message}")
}
Looper.loop()
}.start()
// Set webview
Log.i(tag, "Starting webview")
webView = findViewById(R.id.webview)
webView.webViewClient = object : WebViewClient() {
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
// Ignore SSL certificate errors (not recommended for production)
handler?.proceed()
}
}
webView.settings.javaScriptEnabled = true
webView.loadUrl("file:///android_asset/iframe/iframe.html")
swipeRefreshLayout = findViewById(R.id.swipe_refresh_layout)
swipeRefreshLayout.setOnRefreshListener {
webView.reload() // Reload the current page
swipeRefreshLayout.isRefreshing = false // Stop the refreshing animation
}
}
fun closeLoader() {
Log.i(tag, "Close loader")
webView.evaluateJavascript("closeLoader();", null)
}
}
Python:
from hypercorn.asyncio import serve
from hypercorn.config import Config
from quart import Quart, render_template
from com.example.chatterbot import MainActivity
activity = MainActivity() #
Подробнее здесь: https://stackoverflow.com/questions/789 ... oid-kotlin
Запустите веб-сервер Quart на Python с помощью Chaquopy на Android (Kotlin) ⇐ Android
Форум для тех, кто программирует под Android
1726777607
Anonymous
Я пытаюсь создать приложение для Android с приложением Quart, работающим на Python с Chaquopy, но как только я добавляю вызов Kotlin из Python, я получаю сообщение об ошибке при запуске сервера Python: невозможно создать обработчик внутри потока Thread[Thread- 4,5,main], который не вызывал Looper.prepare() из MainActivity. Поэтому я добавил вызов Looper, но это дает мне ошибку при запуске сервера Python: метод addObserver должен быть вызван в основном потоке, даже если вызов для запуска приложения Quart находится в потоке, где запускается интерпретатор Python.< /p>
Котлин:
package com.example.chatterbot
import android.annotation.SuppressLint
import android.net.http.SslError
import android.os.Bundle
import android.os.Looper
import android.util.Log
import android.webkit.SslErrorHandler
import android.webkit.WebView
import android.webkit.WebViewClient
import androidx.appcompat.app.AppCompatActivity
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.chaquo.python.Python
import com.chaquo.python.android.AndroidPlatform
class MainActivity : AppCompatActivity() {
private val tag: String = "MainActivity" // Define a tag for your logs
private var serverPort: Int? = null
private lateinit var webView: WebView
private lateinit var swipeRefreshLayout: SwipeRefreshLayout
@SuppressLint("SetJavaScriptEnabled")
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// Run the Python server in a background thread
Thread {
Looper.prepare()
Log.i(tag, "Starting server")
Log.i(tag, "IS STARTED")
Log.i(tag, Python.isStarted().toString())
if (! Python.isStarted()) {
Python.start(AndroidPlatform(this))
}
try {
val py = Python.getInstance()
py.getModule("app").callAttr("run")
} catch (e: Exception) {
Log.e(tag, "Error starting Python server: ${e.message}")
}
Looper.loop()
}.start()
// Set webview
Log.i(tag, "Starting webview")
webView = findViewById(R.id.webview)
webView.webViewClient = object : WebViewClient() {
override fun onReceivedSslError(
view: WebView?,
handler: SslErrorHandler?,
error: SslError?
) {
// Ignore SSL certificate errors (not recommended for production)
handler?.proceed()
}
}
webView.settings.javaScriptEnabled = true
webView.loadUrl("file:///android_asset/iframe/iframe.html")
swipeRefreshLayout = findViewById(R.id.swipe_refresh_layout)
swipeRefreshLayout.setOnRefreshListener {
webView.reload() // Reload the current page
swipeRefreshLayout.isRefreshing = false // Stop the refreshing animation
}
}
fun closeLoader() {
Log.i(tag, "Close loader")
webView.evaluateJavascript("closeLoader();", null)
}
}
Python:
from hypercorn.asyncio import serve
from hypercorn.config import Config
from quart import Quart, render_template
from com.example.chatterbot import MainActivity
activity = MainActivity() #
Подробнее здесь: [url]https://stackoverflow.com/questions/78987013/run-a-quart-web-server-in-python-with-chaquopy-on-android-kotlin[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия