MvvmCross と Android の開発は初めてです。ビュー モデルで JSON Web サービスに POST データを呼び出す必要があります。次に、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
いずれかから起動しようとすると、イベントは UI で起動されません。ServiceBeginGetRequestStreamCallback
Service_Completed
ビュー モデルがポータブル クラス ライブラリにあるため、これをデバッグする方法がわかりません。この時点で、CallService が正常に呼び出されていることがわかります。ただし、どこに到達しているのServiceBeginGetRequestStreamCallback
か、到達しているのかさえわかりませんService_Completed
。
Windows Phone 開発の経験から、UI スレッドを使用しているかどうかを確認する必要があることはわかっています。そうでない場合は、Deployment.stuff を実行する必要があります。しかし、MvvmCross アプローチでは、a) それを行う必要があるかどうか、b) ビュー モデルが Android と iOS の両方で動作する必要があるため、それがオプションであるかどうかはわかりません。とにかく、a) ビュー モデルから Web サービスを呼び出し、b) UI を更新できるようにメッセージをビューに送り返す方法が必要です。残念ながら、私はそれを理解できないようです。誰か (slodge :)) 私が間違っていることを教えてもらえますか?
ありがとうございました