问题是当我调用ParsePush.subscribeInBackground方法时出现错误:
解析订阅错误:错误的json响应:org.json.JSONException:值无效的java.lang.String类型无法转换为JSONObject
下面附带示例代码:
Parse.initialize(AnUtility.GetApplicationContex(), appId, dotNetKey);
ParseInstallation.getCurrentInstallation().saveInBackground();
ParsePush.subscribeInBackground("", new SaveCallback() {
@Override
public void done(ParseException e) {
if (e == null) {
Log.d(TAG, "Successfully subscribed to Parse broadcast Push Notifications");
} else {
Log.e(TAG, "Parse subscription error: " + e.getMessage());
}
}
});
根据此问题,LogCat中存在一些警告:
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): Cannot use GCM for push because the app manifest is missing some required declarations. Please make sure that these permissions are declared as children of the root <manifest> element:
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <uses-permission android:name="android.permission.INTERNET" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <uses-permission android:name="android.permission.VIBRATE" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <uses-permission android:name="android.permission.WAKE_LOCK" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <uses-permission android:name="android.permission.GET_ACCOUNTS" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <permission android:name="com.myappbundle.permission.C2D_MESSAGE" android:protectionLevel="signature" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <uses-permission android:name="com.myappbundle.permission.C2D_MESSAGE" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): Also, please make sure that these services and broadcast receivers are declared as children of the <application> element:
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <service android:name="com.parse.PushService" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <receiver android:name="com.parse.GcmBroadcastReceiver" android:permission="com.google.android.c2dm.permission.SEND">
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <intent-filter>
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <action android:name="com.google.android.c2dm.intent.RECEIVE" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): <category android:name="com.myappbundle" />
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): </intent-filter>
01-25 14:21:46.057: E/com.parse.ManifestInfo(3217): </receiver>
我的AndroidManifest.xml文件包含下一个接收器:
<receiver android:exported="true" android:name="com.androidnative.gcm.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" />
<category android:name="com.unionassets.android.plugin.preview" />
</intent-filter>
</receiver>
<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>
和权限:
<permission android:name="com.example.gcm.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<permission android:name="com.unionassets.android.plugin.preview.permission.C2D_MESSAGE" android:protectionLevel="signature" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="com.android.vending.BILLING" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.android.vending.CHECK_LICENSE" />
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="com.unionassets.android.plugin.preview.permission.C2D_MESSAGE" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_TASKS" />
我现在正在使用Parse Android SDK 1.8.2。在更好的1.8.0版本中,相同的代码运行良好。 那么,它是否依赖于Parse SDK版本或我的代码中还有其他内容?
期待建议。 提前谢谢。
祝你好运, 亚历克斯。
答案 0 :(得分:0)
我刚才有一个非常类似的问题。 解决方案(事实证明)很简单,但追踪真的很糟糕:
Application Id键错误!
我从一位同事那里得到了钥匙,事实证明我们其中一人在复制它时砍掉了第一个字符:-( 为什么Parse报告为:
Parse subscription error: bad json response: org.json.JSONException: Value Invalid of type java.lang.String cannot be converted to JSONObject
似乎完全违反直觉。我希望他们做了另一个异常,或者至少返回了开发人员可以看到的实际JSON字符串,因此该问题可以被识别为初始化错误,而不是解析问题。
仔细检查您的钥匙,看看是否能解决问题 - 就像它对我一样。