我创建了一个连接到API的类,以使用httpclient检索所需的数据。该文件在视图的代码隐藏文件中调用并且工作正常。比我决定实施MVVM方法。结果,我将初始化其余服务类的代码移动到视图模型。 在这之后,我停止获取数据。为了调查,我说明了调试会话,断点位于我初始化其余服务类的行。比我执行那条线。通过这样做,我发现一个巨大的android单声道异常被抛出,调试会话如果停止。该应用程序退出调试会话。 自从我说用Xamarin Forms开发我的应用程序以来,这是第一次发生。我不知道它为什么会这样破碎。对你的帮助表示感谢。
这是正常运行的代码。 在文件背后的视图代码中
[XamlCompilation(XamlCompilationOptions.Compile)]
public partial class SubtaskPage : ContentPage
{
protected override void OnAppearing()
{
base.OnAppearing();
PopulateSubtaskData();
}
private async void PopulateSubtaskData()
{
lstSubtasks.IsRefreshing = true;
try
{
RestService rs = new RestService();
SResponse = await rs.GetSubtasksAsync(Convert.ToInt32(Application.Current.Properties["UserId"]));
if (SResponse.Status == 1)
{
lstSubtasks.ItemsSource = SResponse.Subtasks;
}
else
{
await DisplayAlert("Error", SResponse.Message, "Ok");
}
}
catch (Exception E)
{
Debug.WriteLine(@"GetSubtasksAsync -> ERROR {0}", E.Message);
}
lstSubtasks.IsRefreshing = false;
}
}
其余服务类如下 此类位于名为“Services”的单独文件夹中。出于安全原因,ip和url已被更改。
class RestService
{
HttpClient client;
public List<Ticket> Tickets { get; private set; }
string Server1 = "server ip";
string Server2 = "server ip";
public RestService()
{
client = new HttpClient();
client.MaxResponseContentBufferSize = 256000;
}
public async Task<SubtasksResponse> GetSubtasksAsync(int UserId)
{
SubtasksResponse SubtaskResponse = new SubtasksResponse();
string ApiUrl = "URL";
string Url = "";
HttpResponseMessage response;
if (CrossConnectivity.Current.IsConnected)
{
Url = await GetActiveServerAsync();
if (Url != "")
{
var uri = string.Format(Url + ApiUrl, UserId);
try
{
response = await client.GetAsync(uri);
if (response.IsSuccessStatusCode)
{
var content = await response.Content.ReadAsStringAsync();
SubtaskResponse.Subtasks = JsonConvert.DeserializeObject<List<Ticket>>(content);
SubtaskResponse.Status = 1;
}
else
{
SubtaskResponse.Subtasks = null;
SubtaskResponse.Status = 0;
SubtaskResponse.Message = "Attempt to fetch data from server was unsuccessful. Please try again";
}
}
catch (Exception E)
{
SubtaskResponse.Subtasks = null;
SubtaskResponse.Status = 0;
SubtaskResponse.Message = "Error occured while fetching data from the server. Please try again";
}
}
else
{
SubtaskResponse.Subtasks = null;
SubtaskResponse.Status = 0;
SubtaskResponse.Message = "Remote Server Not Responding! Please try again later";
}
}
else
{
SubtaskResponse.Subtasks = null;
SubtaskResponse.Status = 0;
SubtaskResponse.Message = "No Network Connection Found! Please connect to a network and try again";
}
return SubtaskResponse;
}
}
}
这一点工作正常,直到我将视图模型添加到混合中。 这就是我在视图模型中调用函数的方法。
async Task<SubtasksResponse> PopulateSubtaskList()
{
RestService rs = new RestService();
IsBusy = true;
_subtaskList = await rs.GetSubtasksAsync(Convert.ToInt32(Application.Current.Properties["UserId"]));
IsBusy = false;
return _subtaskList;
}
“RestService rs = new RestService();”这是代码中断的行。
希望你能清楚了解情况。如果需要其他信息,请与我们联系。 感谢
答案 0 :(得分:0)
不要这样做。如果你想从mvvm Xamarin Forms应用程序调用休息,我可以建议Refit。所有困难的工作已经为你完成并抽象出来了。只需几行代码即可启动并运行。
答案 1 :(得分:0)
BTW您显示的错误消息可能与您的代码无关,但是最近的Xamarin版本中存在错误。见这里:https://bugzilla.xamarin.com/show_bug.cgi?id=56787
答案 2 :(得分:0)
在此页面上找到答案(https://releases.xamarin.com/common-issues-in-the-xamarin-15-2-2-release-being-tracked-by-the-xamarin-team/)。
解决方案如下
有关详细信息,请访问上面给出的链接。