android qt parse.com qt5 qtandroidextras

Presione usando Parse en Qt5.5 para Android: NullPointerException en getCurrentInstallation



parse.com qtandroidextras (0)

Estoy tratando de usar el servicio push de parse.com con Qt5.5 en Android. Cuando intento llamar a ParseInstallation.getCurrentInstallation () obtengo el siguiente error:

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:

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, la identificación de la aplicación real está configurada 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 cierre de la aplicación:

<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, utilicé el complemento v-play hasta ahora, pero dejó de funcionar, así que intento implementarlo yo mismo, lo que significa que el análisis sintáctico se configuró correctamente, porque solía funcionar con el complemento v-play (hasta que dejó de funcionar; ) - pero eso es un error en el lado de v-play)

¿Qué estoy haciendo mal?