我是Sagar,我正在尝试使用REST API (Service)
实现Parse Push-Notification in
Android,并且我几乎成功地使用REST API
在Xamarin-Android
中实现Push-Notification
。但是,我被困在将数据发送到REST service
中的一部分。我试图通过服务中的ParseObject
传递,但是在解析表中需要对象,()。我试图通过以下ParseObject as
:
JsonConvert.SerializeObject(ParseUser.CurrentUser)
它转换ParseObject into
数组和数组未在表中接受,并且我无法将其保存在表中。因为我需要对象。我需要开发人员的解决方案或建议。您的帮助将不胜感激。我正在尝试以下代码以实现结果。
public static void RegisterPush(string regristrationId)
{
if (regristrationId != null) {
string appID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string restID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
string masterID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
try {
var client = new RestClient ("https://api.parse.com");
var request = new RestRequest ("1/installations", RestSharp.Method.POST);
request.AddHeader ("Accept", "application/json");
request.AddHeader ("X-Parse-Application-Id", appID);
request.AddHeader ("X-Parse-REST-API-Key", restID);
request.Credentials = new NetworkCredential (appID, masterID);
request.Parameters.Clear ();
Console.Error.WriteLine ("ParseUser.CurrentUser-->"+ (ParseObject) ParseUser.CurrentUser);
//JsonConvert.SerializeObject(ParseUser.CurrentUser)
string strJSONContent = "{"user" :"+ JsonConvert.SerializeObject(ParseUser.CurrentUser)+","owner":"" + ParseUser.CurrentUser.ObjectId + "","deviceType":"android","GCMSenderId":"1234567890","appName":"abcdefgh","pushType":"gcm","deviceToken":"" + regristrationId + ""}";
Console.Error.WriteLine("json string-->"+ strJSONContent);
request.AddParameter ("application/json", strJSONContent, ParameterType.RequestBody);
client.ExecuteAsync (request, response => {
Console.Error.WriteLine ("response for android parse installation-->" + response.Content);
});
} catch (Exception ex) {
Console.WriteLine (ex.Message);
}
}
}`
Output:{"user" :[{"Key":"dealOffered","Value":4},{"Key":"dealRequested","Value":5},{"Key":"displayName","Value":"Cook"},{"Key":"email","Value":"lorenzo@gmail.com"},{"Key":"firstName","Value":"Lorenzo"},{"Key":"lastName","Value":"Cook"},{"Key":"mobileNumber","Value":9999999999.0},{"Key":"picture","Value":{"IsDirty":false,"Name":"tfss-afd25c29-6679-4843-842c-fe01f7fcf976-profile.jpg","MimeType":"image/jpeg","Url":"http://files.parsetfss.com/profile.jpg"}},{"Key":"provider","Value":"password"},{"Key":"userType","Value":"Merchant"},{"Key":"username","Value":"merchant@sailfish.com"},{"Key":"zipCode","Value":2342343}],"owner":"3cF1vHUXkW","deviceType":"android","GCMSenderId":"1234567890123","appName":"Sailfish","pushType":"gcm","deviceToken":"APA91bE3bsTIInQcoloOBE4kdLVVHVTRVtNyA1A788hYSC15wAVu8mUg-lwk7ZPk370rngrK7J6OoLmiM9HRr1CGPaBo6LCNrSUL7erBku4vepaFFkQzgqS6BcAemp"}
Error:{"code":111,"error":"invalid type for key user, expected *_User, but got array"}
maven
我在一个查询中找到了解决方案,解析Xamarin Docs,方法很简单,但是我很难找到。
问题在于,数据以JSON格式在REST中传递,以通过REST API传递任何指针,如下所示。
解决方案如下:`{
"user":{
"__type":"Pointer",
"className":"_User",
"objectId":"qYvzFzGAzc"
},
"owner":"qYvzFzGAzc",
"deviceType":"android",
"GCMSenderId":"123456789",
"appName":"NiceApp",
"pushType":"gcm",
"deviceToken":"APA91bFeM10jdrCS6fHqGGSkON17UjEJEfvJEmGpRM-d6hq3hQgDxKHbyrqAIxMnEGgbLEZf0E9AllHxiQQQCdEFiNMF1_A8q0n9tGpBE5NKhvS2ZGJ9PZ7585puWqz_1Z1EjSjOvgZ1LQo708DeL2KzA7EFJmdPAA"
}`
看起来您的列user
设置错误。它应该显示为指针< _user>不指针
如果将此类加载到数据浏览器中,则是定义为字符串的"用户"键,或指针< _user>
此错误似乎表明这是一个字符串列,这就是为什么parse.user对象没有被接受为有效值的原因。您可能之前曾尝试在此密钥上设置字符串,然后将"用户"键锁定为字符串列。
。在此页面上给出的示例中找到了它-https://www.parse.com/docs/rest
您是否在通过ParseObject时检查了REST API连接?
因为您的错误说:
Error:{"code":111,"error":"invalid type for key user, expected *_User, but got array"}
在这里"code":111
当服务器拒绝连接