Как исправить ошибку - Android.Util.AndroidRuntimeException
Пишу приложения, в данный момент моя программа состоит из двух страниц, при переходе из главной страницы на другую при нажатии на элемент списка LisaView выходит ошибка - Android.Util.AndroidRuntimeException: Only the original thread that created a view hierarchy can touch its views. Expected: main Calling. Мне совсем непонятно как это исправить, я программировать начал недавно. Вот код основной страницы:
public partial class MainPage : ContentPage
{
private readonly ServiceTable _ServiceTable;
public string rr { get; set; }
public MainPage(ServiceTable servicetable)
{
InitializeComponent();
_ServiceTable = servicetable;
Task.Run(async () => listview.ItemsSource = await _ServiceTable.PoluchenieAllZapis());
}
// вызов всплывающего окна, с помощью которого добовляется названия "Тематик" и после добовлении обновляется список "Тематик"
private async void Addtematica(object sender, EventArgs e)
{
var rresult = DisplayPromptAsync("Напишите названия тематики", "ввод");
if (rresult == null || string.IsNullOrWhiteSpace(await rresult) == true)
{
return;
}
else
{
_ServiceTable.CreatZapis(new Tablica1
{
Tematica = await rresult, // создаю запись в первую БД Sqlite
});
}
listview.ItemsSource = await _ServiceTable.PoluchenieAllZapis(); // обновление списков Тематик
}
// метод отвечает за переход на страницу добавления "Тем" после нажатия на элемент из списка "Тематик"
private async void PerehodNaTemi(object sender, EventArgs e)
{
Shell.Current.GoToAsync(nameof(Temi));
}
// с помощью этого метода создается новая запись выброного элемента из списка "Тематик" в таблицу2
public async void OnListViewItemSelected(object sender, SelectedItemChangedEventArgs e)
{
var r = (Tablica1)e.SelectedItem; // Преобразование выбранного элемента в объект нужного типа
rr = r.Tematica;//.ToString();
//метод для создпнии записи названии тематики для того чтоб передать её страницы для создании темы
Task.Run(async () =>
{
await _ServiceTable.CreatZapis2(new Tablica2
{
TematicaString = r.Tematica, // создаю запись во вторую БД
});
});
}
<?xml version="1.0" encoding="utf-8"?>
<ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:local="clr-namespace:ProgrammingLearn"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ProgrammingLearn.MainPage">
<FlexLayout
Direction="Column">
<VerticalStackLayout
Padding="10"
Margin="1"
Spacing="1">
<Button
x:Name="ccnopka"
Text="Добавить тематику"
Clicked="Addtematica" />
</VerticalStackLayout>
<ListView
x:Name="listview"
FlexLayout.Grow="1"
ItemSelected="OnListViewItemSelected"
ItemTapped="PerehodNaTemi"
CachingStrategy="RetainElement">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<VerticalStackLayout
Padding="10">
<Label
Text="{Binding Tematica}"
FontSize="17"
FontAttributes="Bold" />
</VerticalStackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</FlexLayout>
Вот код для второй страницы:
public partial class Temi : ContentPage
{
string GET_NAME_TEMATICI { get; set; }
private readonly ServiceTable _ServiceTable;
public Temi(ServiceTable servicetable)
{
InitializeComponent();
_ServiceTable = servicetable;
Task.Run(async () =>
{
List<Tablica2> PolVsRes = new List<Tablica2>();
PolVsRes = await _ServiceTable.PoluchenieAllZapis2();
foreach (var q in PolVsRes)
{
GET_NAME_TEMATICI = q.TematicaString.ToString();
nameTema.Text = q.TematicaString;//.ToString();
Task.Run(async () => spisok_tem.ItemsSource = await _ServiceTable.GetPoName(GET_NAME_TEMATICI)); // выводит список Тем
}
});
}
// вызов всплывающего окна, с помощью которого добовляется названия "Темы" и после добовлении обновляется список "Тем"
private async void AddTemaa(object sender, EventArgs e)
{
var rresult = DisplayPromptAsync("Напишите названия темы", "ввод");
if (rresult == null || string.IsNullOrWhiteSpace(await rresult) == true)
{
return;
}
else
{
_ServiceTable.CreatZapis(new Tablica1
{
Tematica = GET_NAME_TEMATICI,
Tema = await rresult,
});
}
spisok_tem.ItemsSource = await _ServiceTable.GetPoName(GET_NAME_TEMATICI); // обновление список тем после ввода
}
private async void PerehodNaPodtemi(object sender, EventArgs e)
{
}
private async void OnListViewItemSelected(object sender, EventArgs e)
{
}
}
<?xml version="1.0" encoding="utf-8"?>
<ContentPage
xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:toolkit="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:local="clr-namespace:ProgrammingLearn"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="ProgrammingLearn.Temi">
<FlexLayout
Direction="Column">
<VerticalStackLayout
Padding="10"
Margin="1"
Spacing="1">
<Label
x:Name="nameTema"
Text="{Binding TematicaString}" />
<Button
x:Name="iii"
Text="Добавить тему"
Clicked="AddTemaa" />
</VerticalStackLayout>
<ListView
x:Name="spisok_tem"
FlexLayout.Grow="1"
ItemTapped="PerehodNaPodtemi"
ItemSelected="OnListViewItemSelected">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<VerticalStackLayout
Padding="10">
<Label
Text="{Binding Tema}"
FontSize="17"
FontAttributes="Bold" />
</VerticalStackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</FlexLayout>