我刚刚开始在一个多平台项目的核心库中使用Mvvmcross.
我想将Mvvmcross.Network插件与Mvvmcross.Json插件一起使用,但我无法找到一个结合这两个插件的好例子.我已经观看了所有的N 1视频,我猜这是在上传的视频时没有实现的.
理想情况下,我想知道如何使用json请求和json响应发出异步请求.
提前致谢
最佳答案 似乎在Mvvmcross(Mvx)4.1.4的所有版本中存在回归错误,并且直到当前最新稳定的4.2.2.在接口IMvxJsonRestClient和IMvxRestClient中缺少
readme中描述的回调方法的情况.该问题已在当前的
master branch(提交:
a5561b和
fb2feb7)中得到解决,因此很有可能在下一版本中修复.
如果要使用MvvmCross.Plugins.Json反序列化JSON响应,则使用MvxJsonRestClient而不是标准MvxRestClient.
以下是使用JSONPlaceholder API的MvxJsonRestClient示例:
方法 – 回调
在使用早于4.1.4的Mvx版本时,您可以使用回调方法,最有可能在4.2.2之后的版本中使用.
public void PostSample()
{
var request = new MvxJsonRestRequest<UserRequest>
("http://jsonplaceholder.typicode.com/posts")
{
Body = new UserRequest
{
Title = "foo",
Body = "bar",
UserId = 1
}
};
var client = Mvx.Resolve<IMvxJsonRestClient>();
client.MakeRequestFor(request,
(MvxDecodedRestResponse<UserResponse> response) =>
{
// do something with the response.StatusCode and response.Result
},
error =>
{
// do something with the error
});
}
方法 – 异步
使用Mvx 4.1.4及更高版本时,可以使用Async方法.
public async Task PostSampleAsync()
{
var request = new MvxJsonRestRequest<UserRequest>
("http://jsonplaceholder.typicode.com/posts")
{
Body = new UserRequest
{
Title = "foo",
Body = "bar",
UserId = 1
}
};
var client = Mvx.Resolve<IMvxJsonRestClient>();
var response = await client.MakeRequestForAsync<UserResponse>(request);
// Check response.StatusCode if matches your expected status code
if (response.StatusCode == System.Net.HttpStatusCode.Created)
{
// interrogate the response object
UserResponse user = response.Result;
}
else
{
// do something in the case of error/time-out/unexpected response code
}
}
请求和响应类
public class UserRequest
{
public string Title { get; set; }
public string Body { get; set; }
public int UserId { get; set; }
}
public class UserResponse
{
public string Title { get; set; }
public string Body { get; set; }
public int UserId { get; set; }
public int Id { get; set; }
}