我是新来MvvmCross和Android的发展。 我有一个需要调用要发布我的视图模型数据的JSON Web服务。 然后我需要显示Web服务的结果早在我的UI。 我的视图模型的要点如下所示:
public class MyViewModel : MvxViewModel
{
public override void Start()
{
base.Start();
}
public event EventHandler<EventArgs> Service_Finished;
public void CallService()
{
string url = GetServiceUrl();
WebRequest serviceRequest = HttpWebRequest.Create(url);
serviceRequest.Method = "POST";
serviceRequest.ContentType = "application/json";
serviceRequest.BeginGetRequestStream(new AsyncCallback(ServiceBeginGetRequestStreamCallback), serviceRequest);
}
private void ServiceBeginGetRequestStreamCallback(IAsyncResult ar)
{
string json = GetJson();
HttpWebRequest myWebRequest = (HttpWebRequest)(ar.AsyncState);
using (Stream postStream = myWebRequest.EndGetRequestStream(ar))
{
byte[] byteArray = Encoding.UTF8.GetBytes(json);
postStream.Write(byteArray, 0, byteArray.Length);
}
myWebRequest.BeginGetResponse(new AsyncCallback(Service_Completed), myWebRequest);
}
private void Service_Completed(IAsyncResult result)
{
if (Service_Finished != null)
Service_Finished(this, new EventArgs());
}
}
在我看来(UI)的代码,我已经添加了一个事件处理程序Service_Finished
事件。 我注意到,我可以成功地从“扔事件CallService
在我的视图模型”的方法。 但是,如果我尝试火灾Service_Finished
无论从ServiceBeginGetRequestStreamCallback
或Service_Completed
部分,该事件从未在UI解雇。
由于事实视图模型是在便携式类库,我无法弄清楚如何调试这一点。 在这一点上,我知道CallService是越来越成功调用。 然而,我不能告诉在那里我得到内ServiceBeginGetRequestStreamCallback
,如果我甚至得到Service_Completed
。
我知道从我的Windows Phone的开发经验,我需要检查看看,如果我在UI线程上,如果没有,我不得不做一些Deployment.stuff。 但是,随着MvvmCross的做法,我不知道一),如果我要做到这一点,B),如果这是一个连选项,因为视图模型应与Android和iOS工作。 无论如何,必须有一种方法来一)从调用视图模型Web服务和b)将消息发送回视图,以便用户界面可更新。 不幸的是,我似乎无法弄清楚。 有人(slodge :))能告诉我什么,我做错了什么?
谢谢