Android के लिए Q5.5 पर पार्स का उपयोग करके पुश करें: NullPointerException getCurrentInstallation पर



qt parse.com (0)

मैं एंड्रॉइड पर क्यूटी 5.5 के साथ parse.com पुश सेवा का उपयोग करने की कोशिश कर रहा हूं। ParseInstallation.getCurrentInstallation () को कॉल करने की कोशिश करते समय मुझे निम्न त्रुटि मिलती है:

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)

यहां मेरा कोड है:

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;
}

मेरे एंड्रॉइड मैनिफ़ेस्ट। एक्सएमएल के पास, खोलने के आवेदन टैग के ठीक पहले, (मैप प्लेसहोल्डर है, असली एप आईडी सही सेट है):

<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"/>

... और समापन अनुप्रयोग टैग से पहले निम्नलिखित सही:

<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>

मैंने वास्तव में अब तक v-play प्लगइन का उपयोग किया है, लेकिन यह काम करना बंद कर दिया, इसलिए मैं इसे स्वयं लागू करने का प्रयास कर रहा हूं, जिसका अर्थ है, पार्स साइड सही कॉन्फ़िगर किया गया है, क्योंकि यह v-play प्लगइन के साथ काम करने के लिए किया गया था (जब तक यह काम बंद नहीं हुआ; ) - लेकिन यह v-play पक्ष पर एक त्रुटि है)

मैं क्या गलत कर रहा हूं?





qtandroidextras