关于如何在 android 的安装类中使用 Rest API(service) 传递 ParseObject(Object)?
Posted
技术标签:
【中文标题】关于如何在 android 的安装类中使用 Rest API(service) 传递 ParseObject(Object)?【英文标题】:About how to pass the ParseObject(Object) using Rest API(service) in Installation class in android? 【发布时间】:2015-05-05 05:36:22 【问题描述】:我是 sagar,我正在尝试使用REST API (Service)
实现Parse Push-Notification in
android,并且我几乎成功地使用REST API
在Xamarin-Android
中实现Push-Notification
。但是我在将数据发送到REST service
时遇到了麻烦。我试图在服务中传递ParseObject
,但在解析表中需要 Object,()。我试图通过下面的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"
【问题讨论】:
认为使用云代码会容易得多 【参考方案1】:行家
我在一个查询中找到了解决方案,解析 xamarin 文档,方法很简单,但我有点难以找到。
问题在于 REST 中以 json 格式传递的数据,要使用 REST API 传递任何指针,如下所示。
解决方法如下: `
"user":
"__type":"Pointer",
"className":"_User",
"objectId":"qYvzFzGAzc"
,
"owner":"qYvzFzGAzc",
"deviceType":"android",
"GCMSenderId":"123456789",
"appName":"NiceApp",
"pushType":"gcm",
"deviceToken":"APA91bFeM10jdrCS6fHqGGSkON17UjEJEfvJEmGpRM-d6hq3hQgDxKHbyrqAIxMnEGgbLEZf0E9AllHxiQQQCdEFiNMF1_A8q0n9tGpBE5NKhvS2ZGJ9PZ7585puWqz_1Z1EjSjOvgZ1LQo708DeL2KzA7EFJmdPAA"
`
【讨论】:
【参考方案2】:您的专栏user
似乎设置错误。它应该显示为 Pointer<_user> 而不是 Pointer
如果您在数据浏览器中加载此类,“用户”键是定义为字符串还是指针 <_user>
此错误似乎表明这是一个字符串列,这就是 Parse.User 对象未被接受为有效值的原因。您之前可能曾尝试在此键上设置一个字符串,这又将“用户”键类型锁定为字符串列。
在本页给出的示例中找到它 - https://www.parse.com/docs/rest
【讨论】:
感谢您的快速响应,但请给我看一个例子。我哪里出错了。 您正在提供密钥user
并解析完整的 Json 对象,这就是您收到该异常的原因。
我应该用什么来代替键'user'..? <_User>
或 Pointer<_User>
在调用Rest..?
时,您能告诉我JSON string
的正确格式吗【参考方案3】:
您在传递 ParseObject 时检查过您的 REST API 连接吗? 因为你的错误说:
Error:"code":111,"error":"invalid type for key user, expected *_User, but got array"
这里"code":111
服务器拒绝连接时出现此错误代码
【讨论】:
这个错误是关于如何在xamarin android中传递REST API
中的parseObject。如果我更改密钥,它会显示不同的错误。以上是关于关于如何在 android 的安装类中使用 Rest API(service) 传递 ParseObject(Object)?的主要内容,如果未能解决你的问题,请参考以下文章
如何在同一设备上使用同一个包发布和安装同一个 android 应用的两个版本