我正在尝试使用Parse推送通知服务发送自定义数据,但是从Bundle中提取时,将返回null值。
自定义广播接收器:
@Override
public void onReceive(Context context, Intent intent) {
Log.e("Receiver","Invoked");
Bundle bundle = intent.getExtras();
Intent contentIntent = new Intent(context, MainPage.class);
String alertMsg = bundle.getString("heading"); //never get this value
String urlString = bundle.getString("dataString"); //never get this value
contentIntent.putExtra(EXTRA_URL, urlString);
PendingIntent pendingIntent = PendingIntent.getActivity(context,
NOTIFY_REQUEST_CODE, contentIntent, PendingIntent.FLAG_ONE_SHOT);
showNotification(context, notificationId, alertMsg, pendingIntent);
}
宣言声明:
<receiver
android:name=".receiver.NotificationReceiver"
android:exported="false">
<intent-filter>
<action android:name="link_notification"/>
</intent-filter>
</receiver>
我正在从解析仪表板发送以下JSON:
{ "dataString": "objectId", "heading": "type", "action": "link_notification" }
当我记录Bundle数据时,我能够看到标题和 dataString ,但无法访问它。该包总是返回null。
请帮忙! 感谢。
答案 0 :(得分:16)
JSON将使用额外的字符串com.parse.Data
。
@Override
public void onReceive(Context context, Intent intent) {
Bundle extras = intent.getExtras();
String jsonData = extras.getString("com.parse.Data");
JSONObject jsonObject;
try {
jsonObject = new JSONObject(jsonData);
String heading = jsonObject.getString("heading");
String dataString = jsonObject.getString("dataString");
} catch (JSONException e) {
e.printStackTrace();
}
}
答案 1 :(得分:3)
好的,现在我明白了。要获取Json字符串,您需要执行以下操作:
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle extra = intent.getExtras();
String json = extra.getString("com.parse.Data");
}
答案 2 :(得分:0)
这是因为包数据包含json对象作为可检索的字符串,您可以在解析时检查该键。只有这样你才能用gson解析这个字符串,例如获取Java对象。