关于如何在 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 APIXamarin-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'..? &lt;_User&gt;Pointer&lt;_User&gt; 在调用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 应用的两个版本

如何访问我放在 res 文件夹中的原始资源?

七牛云上传android apk文件

如何在类中获取request,和网站路径

android 如何设置TextView中字体在不同状态下的颜色

如何在Android上安装apk软件