Empuje usando Parse en Qt5.5 para Android: NullPointerException en getCurrentInstallation
Estoy tratando de usar el servicio de push parse.com con Qt5.5 en Android. Cuando intento llamar ParseInstallation.getCurrentInstallation () consigo el error siguiente:
W/System.err( 9094): java.lang.NullPointerException: Attempt to invoke virtual method 'java.io.File com.parse.ParsePlugins.getParseDir()' on a null object reference W/System.err( 9094): at com.parse.ParseCorePlugins.getCurrentInstallationController(ParseCorePlugins.java:272) W/System.err( 9094): at com.parse.ParseInstallation.getCurrentInstallationController(ParseInstallation.java:52) W/System.err( 9094): at com.parse.ParseInstallation.getCurrentInstallation(ParseInstallation.java:57)
Aquí está mi código:
- Cómo agregar actividad de SDK en Qt para Android
- Qt streaming de llamadas de video móvil
- Implementación de aplicaciones Android Qt 5.1
- Qt5 para Android: Proyecto ERROR: Módulo (s) desconocido (s) en QT: qml rápido
- JNI_OnLoad devolvió la versión incorrecta (-1)
QAndroidJniEnvironment env; if (!QAndroidJniObject::isClassAvailable("com/parse/Parse")) { qDebug() << "com/parse/Parse not available"; return; } if (!QAndroidJniObject::isClassAvailable("com/parse/ParseInstallation")) { qDebug() << "com/parse/ParseInstallation not available"; return; } QAndroidJniObject applicationId = QAndroidJniObject::fromString("MY_PARSE_APPLICATION_ID"); QAndroidJniObject clientKey = QAndroidJniObject::fromString("MY_PARSE_CLIENT_ID"); QAndroidJniObject activity = QtAndroid::androidActivity(); if (!activity.isValid()) { qDebug() << "invalid activity"; } QAndroidJniObject application = activity.callObjectMethod("getApplication", "()Landroid/app/Application;"); if (!application.isValid()) { qDebug() << "invalid application"; } qDebug() << env->ExceptionCheck(); QAndroidJniObject::callStaticMethod<void>("com/parse/Parse", "enableLocalDatastore", "(Ljava/lang/object;)V", application.object<jobject>() ); qDebug() << env->ExceptionCheck(); QAndroidJniObject::callStaticMethod<void>("com/parse/Parse", "initialize", "(Ljava/lang/object;Ljava/lang/String;Ljava/lang/String;)V", application.object<jobject>(), applicationId.object<jstring>(), clientKey.object<jstring>() ); qDebug() << env->ExceptionCheck(); // this is where it fails, until here all exception checks show no error: QAndroidJniObject parseInstallation = QAndroidJniObject::callStaticObjectMethod("com/parse/ParseInstallation", "getCurrentInstallation", "()Lcom/parse/ParseInstallation;"); // here ExceptionCheck reports an error for the first time qDebug() << env->ExceptionCheck(); // this gives the above error message env->ExceptionDescribe(); if (!parseInstallation.isValid()) { qDebug() << "invalid parseInstallation"; return; }
Mi AndroidManifest.xml tiene lo siguiente, justo antes de la etiqueta de la aplicación de apertura (myapp es un marcador de posición, el ID de la aplicación real está configurado correctamente):
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.WAKE_LOCK"/> <uses-permission android:name="android.permission.VIBRATE"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <!-- IMPORTANT: Change "com.parse.starter.permission.C2D_MESSAGE" in the lines below to match your app's package name + ".permission.C2D_MESSAGE". --> <permission android:protectionLevel="signature" android:name="myapp.permission.C2D_MESSAGE"/> <uses-permission android:name="myapp.permission.C2D_MESSAGE"/>
… y lo siguiente justo antes de la etiqueta de aplicación de cierre:
<service android:name="com.parse.PushService"/> <receiver android:name="com.parse.ParsePushBroadcastReceiver" android:exported="false"> <intent-filter> <action android:name="com.parse.push.intent.RECEIVE"/> <action android:name="com.parse.push.intent.DELETE"/> <action android:name="com.parse.push.intent.OPEN"/> </intent-filter> </receiver> <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> <action android:name="com.google.android.c2dm.intent.REGISTRATION"/> <!-- IMPORTANT: Change "com.parse.starter" to match your app's package name. --> <category android:name="myapp"/> </intent-filter> </receiver>
De hecho, he utilizado el plugin v-play hasta ahora, pero dejó de funcionar, así que intento implementarlo yo mismo, lo que significa que el lado de análisis está configurado correctamente, ya que solía funcionar con el complemento v-play (hasta que dejó de funcionar; ) – pero eso es un error en el lado v-play)
¿Qué estoy haciendo mal?
- Cómo eliminar el rectángulo de fecha seleccionado en QCalendarWidget y pequeños iconos en widgets
- Bloqueo de orientación de pantalla QML
- Qt Android: ¿Cómo mostrar el diálogo de archivo nativo?
- Qt5.1-android: Qt versión para mips que faltan en QtCreator
- Utiliza el tema de Holo en la aplicación Android de Qt
- ¿Cómo desplegar qt5 qml plugin a android?
- Cómo construir Qt5 para Android?
- Cómo mostrar el contenido web en iOS y Android mediante QML
- Google Maps JS API Windows Phone Córdoba
- ¿Cuál es el comportamiento si una aplicación de Android NDK carga más de una implementación compartida de STL de C ++?