Ich möchte Toast.makeText-Methode von Java in Qt/C++ aufrufen. Codes: Ich habe QT + = androidextras in .pro-Datei hinzugefügt.Qt Android: So rufen Sie Toast.makeText von Java?
Toast.java:
package com.classes.java;
public class Toast {
public static void makeText(String text, int duration) {
Toast.makeText(getApplicationContext(), text, duration).show();
}
}
toast.h:
#ifndef TOAST_H
#define TOAST_H
#include <QObject>
#include <QAndroidJniObject>
class Toast : public QObject
{
Q_OBJECT
public:
explicit Toast(QObject* parent = 0);
Q_INVOKABLE void make_text(QString& text, int duration);
signals:
public slots:
};
#endif // TOAST_H
toast.cpp:
#include "toast.h"
Toast::Toast(QObject* parent) : QObject(parent)
{
}
void Toast::make_text(QString& text, int duration)
{
QAndroidJniObject txt = QAndroidJniObject::fromString(text);
QAndroidJniObject::callStaticObjectMethod(
"com/classes/java/Toast",
"makeText",
"(Ljava/lang/String;I)V",
txt.object<jstring>(), duration);
}
main.cpp:
#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include "toast.h"
int main(int argc, char* argv[])
{
QGuiApplication app(argc, argv);
QQmlApplicationEngine engine;
qmlRegisterType<Toast>("java.class", 1, 0, "Toast");
engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
return app.exec();
}
main.qml:
import QtQuick 2.6
import QtQuick.Window 2.2
import Qt.labs.controls 1.0
import java.class 1.0;
Window {
visible: true
Toast {
id: toast
}
Button {
id: button
text: "Click Me!"
onClicked: toast.make_text("Hello World!", 2000)
}
}
Ich bekomme diese Fehlermeldung:
UserPath\build-QtMobileTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_0-Release\android-build\src\com\classes\java\Toast.java:9: error: cannot find symbol
Toast.makeText(getApplicationContext(), text, duration).show();
^
symbol: method getApplicationContext()
location: class Toast
Note: UserPath\build-QtMobileTest-Android_for_armeabi_v7a_GCC_4_9_Qt_5_6_0-Release\android-build\__qt5__android__files__\src\org\qtproject\qt5\android\bindings\QtActivity.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
1 error
:compileDebugJava FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileDebugJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output.
BUILD FAILED
Ich glaube, ich für getApplicationContext android Kontext benötigen(), aber Ich weiß nicht, wie ich den Kontext bekommen kann. Wie kann ich die Toast.makeText-Methode mit Qt/C++ JNI aufrufen? Vielen Dank.
Dank, habe ich diesen Code und ich fügte AndroidManifest.xml aber ich gleiche Fehler . Ich kenne Java nicht gut. Also verstehe ich Codes auf der Webseite nicht. Kannst du mir helfen? Sollte ich es dann tun? –