我創建了一個連接到API以使用httpclient檢索所需數據的類。該文件在視圖文件的代碼中被調用並且完美地工作。比我決定實施MVVM方法。因此,我將用於初始化其他服務類的代碼移到了視圖模型中。 這樣做後,我停止獲取數據。爲了進行調查,我說明了調試會話的斷點放置在我初始化其餘服務類的那一行。比我執行那條線。通過這樣做,我發現一個巨大的Android單聲道異常被拋出,調試會話被停止。該應用程序退出調試會話。 這是自從我在Xamarin Forms中開發我的應用程序以來第一次發生。我不知道它爲什麼會這樣突破。對你的幫助表示感謝。Xamarin Forms - 從pcl的viewmodel調用rest服務
這是正常工作的代碼。 在視圖代碼隱藏文件
[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;
}
}
REST服務類如下: 這個類是在一個名爲「服務」一個單獨的文件夾。由於安全原因,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();」這是代碼中斷的地方。
希望你能清楚瞭解情況。請讓我知道是否需要額外的信息。 謝謝
如果您可以共享代碼,無論您嘗試到現在爲止,這將是非常好的。這樣社區可以更好地幫助你。 – Yogesh
需要將生成異常的代碼和異常本身添加到您的問題 – SushiHangover
請參閱:https://developer.xamarin.com/guides/xamarin-forms/xaml/xaml-basics/data_bindings_to_mvvm/ – Pratik