Я разрабатываю только приложение для Android .net Maui и испытываю случайные сбои, когда пользователь нажимает на экран, чтобы создать всплывающее окно. Существуют случаи, когда постукивание успешно для 30+ попыток. Когда цель оценивается, пользователь намекает на полевое изображение, и появляется всплывающее окно, чтобы ввести информацию о цели. В моем всплывающем окне.#if ANDROID
using Android.Util;
#endif
using CommunityToolkit.Maui.Views;
using CommunityToolkit.Mvvm.Messaging;
using KorfbalTracker.Helpers;
using KorfbalTracker.Models.Internal;
using KorfbalTracker.Models.Messages;
using KorfbalTracker.Services;
using System.Collections.ObjectModel;
namespace KorfbalTracker.Popups
{
public partial class OnTouchPopup : Popup
{
public string Title
{
set => TitleLabel.Text = value;
}
public string Message
{
set => MessageLabel.Text = value;
}
public ObservableCollection AanvalPlayersNameList { get; set; } = new ObservableCollection();
public ObservableCollection VerdedigingPlayersNameList { get; set; } = new ObservableCollection();
public OnTouchPopup(SessionI session, LocationInformationI locationInformation, string time, Tuple score, List
playerList, Services.Interfaces.ISQLiteTeamDatabaseService sqliteTeamDatabaseService)
{
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 eerste regel OnTouchPopup constructor");
#endif
InitializeComponent();
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 OnTouchPopup constructor: After InitializeComponent()");
#endif
BindingContext = this;
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 OnTouchPopup constructor: After BindingContext = this");
#endif
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 voor ResetRadioButtons()");
#endif
ResetRadioButtons();
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 Na ResetRadioButtons()");
#endif
// Set Title and Message
Title = locationInformation.IsOwnAttempt ? "Kans of doelpunt" : "Doelpunt tegen";
MessageLabel.Text = $"Plaats: {locationInformation.Location}";
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 Na title en message set()");
#endif
// Show "KANS" button only if applicable
KansButton.IsVisible = locationInformation.IsOwnAttempt ? true : false;
KansButton.Clicked += async (s, e) =>
{
await HandleKansClick(session, time, locationInformation, score, playerList, sqliteTeamDatabaseService);
};
GoalButton.Clicked += async (s, e) =>
{
await HandleGoalClick(session, time, locationInformation, score, playerList, sqliteTeamDatabaseService);
WeakReferenceMessenger.Default.Send(new ProcessScoreMessage());
};
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 Laatste regel popup constructor");
#endif
}
private async Task HandleKansClick(SessionI session, string time, LocationInformationI locationInformation, Tuple score, List playerList, Services.Interfaces.ISQLiteTeamDatabaseService sqliteTeamDatabaseService)
{
var aanvalPlayer = GetSelectedAanvalPlayer();
var verdedigingPlayer = GetSelectedVerdedigingPlayer();
if ((string.IsNullOrEmpty(aanvalPlayer) && string.IsNullOrEmpty(verdedigingPlayer))
|| (!string.IsNullOrEmpty(aanvalPlayer) && !string.IsNullOrEmpty(verdedigingPlayer)))
{
await ToastService.CreateToast("Error: Selecteer 1 speler!");
return;
}
var methodOfScoring = GetSelectedGoalType();
var selectedPlayer = !string.IsNullOrEmpty(aanvalPlayer) ? aanvalPlayer : verdedigingPlayer;
var player = playerList.FirstOrDefault(player => player.Name == selectedPlayer);
var scoreString = $"{score.Item1} - {score.Item2}";
var attempt = new AttemptI
{
Id = Guid.NewGuid().ToString(),
SessionId = session.Id,
TeamId = session.TeamId,
PlayerId = player?.Id,
PlayerName = selectedPlayer,
Vak = string.IsNullOrEmpty(KorfbalTrackerHelpers.ConvertVakToString(player.Vak)) ? "" : KorfbalTrackerHelpers.ConvertVakToString(player.Vak),
DateTimeCreated = DateTime.Now,
Score = scoreString,
Time = time,
IsGoal = false,
AttemptContext = "",
AttemptMethod = !string.IsNullOrEmpty(methodOfScoring) ? "" : methodOfScoring,
AttemptLocation = locationInformation.Location,
AttemptXCoordinate = locationInformation.XCoordinate,
AttemptYCoordinate = locationInformation.YCoordinate
};
var result = await sqliteTeamDatabaseService.AddAttemptAsync(attempt);
if (result == 1)
{
await ToastService.CreateToast($"Kans {selectedPlayer}!");
Close();
}
else
{
await ToastService.CreateToast("Error: er is iets fout gegaan!");
}
}
private async Task HandleGoalClick(SessionI session, string time, LocationInformationI locationInformation, Tuple score, List playerList, Services.Interfaces.ISQLiteTeamDatabaseService sqliteTeamDatabaseService)
{
var aanvalPlayer = GetSelectedAanvalPlayer();
var verdedigingPlayer = GetSelectedVerdedigingPlayer();
if ((string.IsNullOrEmpty(aanvalPlayer) && string.IsNullOrEmpty(verdedigingPlayer))
|| (!string.IsNullOrEmpty(aanvalPlayer) && !string.IsNullOrEmpty(verdedigingPlayer)))
{
await ToastService.CreateToast("Error: Selecteer 1 speler!");
return;
}
var methodOfScoring = GetSelectedGoalType();
if (string.IsNullOrEmpty(methodOfScoring))
{
await ToastService.CreateToast("Error: Selecteer manier van scoren!");
return;
}
var selectedPlayer = !string.IsNullOrEmpty(aanvalPlayer) ? aanvalPlayer : verdedigingPlayer;
var player = playerList.FirstOrDefault(player => player.Name == selectedPlayer);
string scoreString;
if (locationInformation.IsOwnAttempt)
{
var scoreOwn = Convert.ToInt32(score.Item1);
scoreOwn++;
scoreString = $"{scoreOwn.ToString()} - {score.Item2}";
}
else
{
var scoreOpponent = Convert.ToInt32(score.Item2);
scoreOpponent++;
scoreString = $"{score.Item1} - {scoreOpponent.ToString()}";
}
var attempt = new AttemptI
{
Id = Guid.NewGuid().ToString(),
SessionId = session.Id,
TeamId = session.TeamId,
PlayerId = player?.Id,
PlayerName = selectedPlayer,
Vak = string.IsNullOrEmpty(KorfbalTrackerHelpers.ConvertVakToString(player.Vak)) ? "" : KorfbalTrackerHelpers.ConvertVakToString(player.Vak),
DateTimeCreated = DateTime.Now,
Score = scoreString,
Time = time,
IsGoal = true,
AttemptContext = locationInformation.IsOwnAttempt ? "Voor" : "Tegen",
AttemptMethod = methodOfScoring,
AttemptLocation = locationInformation.Location,
AttemptXCoordinate = locationInformation.XCoordinate,
AttemptYCoordinate = locationInformation.YCoordinate
};
var result = await sqliteTeamDatabaseService.AddAttemptAsync(attempt);
if (result == 1)
{
if (attempt.AttemptContext == "Voor")
{
await ToastService.CreateToast("GOAL!");
}
else
{
await ToastService.CreateToast("Tegen doelpunt!");
}
Close();
}
else
{
await ToastService.CreateToast("Error: er is iets fout gegaan!");
}
}
private void CancelButton_Clicked(object sender, EventArgs e) => Close();
private void ResetRadioButtons()
{
foreach (var child in RadioButtonGrid.Children)
{
if (child is RadioButton radioButton)
{
radioButton.IsChecked = false;
}
}
}
private string GetSelectedGoalType()
{
foreach (var child in RadioButtonGrid.Children)
{
if (child is RadioButton radioButton && radioButton.IsChecked)
{
return radioButton.Content.ToString();
}
}
return null;
}
private string GetSelectedAanvalPlayer()
{
return AanvalComboBox.SelectedItem as string;
}
private string GetSelectedVerdedigingPlayer()
{
return VerdedigingComboBox.SelectedItem as string;
}
}
}
popup.xaml
Журнал ошибок устройства
Time Device Name Type PID Tag Message
04-11 13:33:57.770 Samsung SM-G781B Error 18875 DEBUG backtrace:
#00 pc 00000000004c9b34 /system/lib64/libhwui.so (android::uirenderer::VectorDrawable::Path::Data::Data(android::uirenderer::VectorDrawable::Path::Data const&)+36) (BuildId: acf40743072550d9961cde5732825b9e)
#01 pc 00000000004d0de4 /system/lib64/libhwui.so (android::createPathData(_JNIEnv*, _jobject*, long)+36) (BuildId: acf40743072550d9961cde5732825b9e)
#02 pc 000000000220d804 /memfd:jit-cache (deleted) (art_jni_trampoline+116)
#03 pc 00000000022f62cc /memfd:jit-cache (deleted) (android.util.PathParser.-$$Nest$smnCreatePathData+108)
#04 pc 00000000022f618c /memfd:jit-cache (deleted) (android.util.PathParser$PathData.+140)
#05 pc 00000000022f5ff4 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VPath.+228)
#06 pc 00000000022f5db4 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VFullPath.+116)
#07 pc 00000000022f590c /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VGroup.+684)
#08 pc 00000000022f598c /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VGroup.+812)
#09 pc 00000000022f598c /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VGroup.+812)
#10 pc 0000000002170578 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VectorDrawableState.+408)
#11 pc 00000000021700b0 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable.+272)
#12 pc 00000000022f5590 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable.+128)
#13 pc 00000000022f5448 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VectorDrawableState.newDrawable+152)
#14 pc 00000000025339e4 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState.+228)
#15 pc 0000000002533680 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable.+240)
#16 pc 00000000025334c0 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable.+128)
#17 pc 0000000002533378 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState.newDrawable+152)
#18 pc 000000000218f6b0 /memfd:jit-cache (deleted) (android.graphics.drawable.DrawableContainer$DrawableContainerState.getChild+400)
#19 pc 0000000002185e58 /memfd:jit-cache (deleted) (android.graphics.drawable.DrawableContainer.selectDrawable+504)
#20 pc 0000000002530c88 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedStateListDrawable.selectTransition+776)
#21 pc 00000000025304f4 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedStateListDrawable.onStateChange+196)
#22 pc 0000000002190738 /memfd:jit-cache (deleted) (android.graphics.drawable.Drawable.setState+184)
#23 pc 000000000257885c /memfd:jit-cache (deleted) (android.widget.CompoundButton.drawableStateChanged+204)
#24 pc 0000000000368774 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#25 pc 0000000000361de4 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+1928) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#26 pc 000000000076f734 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+12208) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#27 pc 00000000003815d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#28 pc 0000000000189914 [anon:dalvik-classes.dex extracted in memory from /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/base.apk] (androidx.appcompat.widget.AppCompatRadioButton.drawableStateChanged+0)
#29 pc 00000000003535dc /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+1932) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#30 pc 000000000037f098 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#31 pc 00000000023390f0 /memfd:jit-cache (deleted) (android.view.View.refreshDrawableState+128)
#32 pc 00000000025424b0 /memfd:jit-cache (deleted) (android.widget.CompoundButton.setChecked+144)
#33 pc 0000000000368774 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#34 pc 0000000000353f24 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+132) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#35 pc 0000000000355d78 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+568) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#36 pc 00000000008c7798 /apex/com.android.art/lib64/libart.so (art::JNI::CallVoidMethodA(_JNIEnv*, _jobject*, _jmethodID*, jvalue const*)+172) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#37 pc 000000000088d7c4 /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodA(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, jvalue const*, art::Primitive::Type, art::InvokeType) (.__uniq.99033978352804627313491551960229047428)+1556) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#38 pc 00000000001a93ac /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#39 pc 00000000001a7db4 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#40 pc 000000000019d32c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#41 pc 000000000019b06c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#42 pc 00000000000c60d0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#43 pc 000000000025ea74 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (mono_runtime_invoke_checked+140) (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#44 pc 00000000002672cc /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#45 pc 0000000000223794 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#46 pc 000000000022ceec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#47 pc 00000000001a93c0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#48 pc 00000000001a7dec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#49 pc 000000000019d32c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#50 pc 000000000019b06c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#51 pc 00000000000c60d0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#52 pc 000000000025ea74 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (mono_runtime_invoke_checked+140) (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#53 pc 00000000002672cc /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#54 pc 0000000000223794 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#55 pc 000000000022ceec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#56 pc 00000000001a93c0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#57 pc 00000000001a7dec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#58 pc 000000000019d32c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#59 pc 00000000001a9718 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#60 pc 00000000001a9c2c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#61 pc 0000000000008a24
04-11 13:33:57.770 Samsung SM-G781B Error 18875 DEBUG Cause: null pointer dereference
x0 b4000078227b06f0 x1 0000000000000000 x2 0000000000000000 x3 000000006fca98d8
x4 0000007fcd2d3af8 x5 0000007fcd2d3b84 x6 0000000014040338 x7 0000000000000028
x8 00000000000000b4 x9 4d99fc9e7f8e9475 x10 00000078b3c00178 x11 0000000000000000
x12 00000078b3c0162c x13 00000078b0368924 x14 00000078b03689a4 x15 0000005004247000
x16 000000793dfd7a70 x17 000000793dfc5f2c x18 000000795e04a000 x19 b4000078227b06f0
x20 0000000000000000 x21 b4000078b3c6f8c0 x22 b4000078b3d075c0 x23 0000000000000008
x24 0000000000000008 x25 0000000014040300 x26 000000006fec13a8 x27 000000006fb26a00
x28 000000006ff2ed10 x29 0000007fcd2d3b90
lr 00000079432d0de8 sp 0000007fcd2d3b90 pc 00000079432c9b34 pst 0000000060001000
Подробнее здесь: https://stackoverflow.com/questions/795 ... te-a-popup
Приложение .NET Maui непредсказуемо приводит к нажатию на экран, чтобы создать всплывающее окно ⇐ Android
Форум для тех, кто программирует под Android
1744372022
Anonymous
Я разрабатываю только приложение для Android .net Maui и испытываю случайные сбои, когда пользователь нажимает на экран, чтобы создать всплывающее окно. Существуют случаи, когда постукивание успешно для 30+ попыток. Когда цель оценивается, пользователь намекает на полевое изображение, и появляется всплывающее окно, чтобы ввести информацию о цели. В моем всплывающем окне.#if ANDROID
using Android.Util;
#endif
using CommunityToolkit.Maui.Views;
using CommunityToolkit.Mvvm.Messaging;
using KorfbalTracker.Helpers;
using KorfbalTracker.Models.Internal;
using KorfbalTracker.Models.Messages;
using KorfbalTracker.Services;
using System.Collections.ObjectModel;
namespace KorfbalTracker.Popups
{
public partial class OnTouchPopup : Popup
{
public string Title
{
set => TitleLabel.Text = value;
}
public string Message
{
set => MessageLabel.Text = value;
}
public ObservableCollection AanvalPlayersNameList { get; set; } = new ObservableCollection();
public ObservableCollection VerdedigingPlayersNameList { get; set; } = new ObservableCollection();
public OnTouchPopup(SessionI session, LocationInformationI locationInformation, string time, Tuple score, List
playerList, Services.Interfaces.ISQLiteTeamDatabaseService sqliteTeamDatabaseService)
{
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 eerste regel OnTouchPopup constructor");
#endif
InitializeComponent();
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 OnTouchPopup constructor: After InitializeComponent()");
#endif
BindingContext = this;
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 OnTouchPopup constructor: After BindingContext = this");
#endif
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 voor ResetRadioButtons()");
#endif
ResetRadioButtons();
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 Na ResetRadioButtons()");
#endif
// Set Title and Message
Title = locationInformation.IsOwnAttempt ? "Kans of doelpunt" : "Doelpunt tegen";
MessageLabel.Text = $"Plaats: {locationInformation.Location}";
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 Na title en message set()");
#endif
// Show "KANS" button only if applicable
KansButton.IsVisible = locationInformation.IsOwnAttempt ? true : false;
KansButton.Clicked += async (s, e) =>
{
await HandleKansClick(session, time, locationInformation, score, playerList, sqliteTeamDatabaseService);
};
GoalButton.Clicked += async (s, e) =>
{
await HandleGoalClick(session, time, locationInformation, score, playerList, sqliteTeamDatabaseService);
WeakReferenceMessenger.Default.Send(new ProcessScoreMessage());
};
#if ANDROID
Log.Debug("KorfbalTracker", $"69696969696969 Laatste regel popup constructor");
#endif
}
private async Task HandleKansClick(SessionI session, string time, LocationInformationI locationInformation, Tuple score, List playerList, Services.Interfaces.ISQLiteTeamDatabaseService sqliteTeamDatabaseService)
{
var aanvalPlayer = GetSelectedAanvalPlayer();
var verdedigingPlayer = GetSelectedVerdedigingPlayer();
if ((string.IsNullOrEmpty(aanvalPlayer) && string.IsNullOrEmpty(verdedigingPlayer))
|| (!string.IsNullOrEmpty(aanvalPlayer) && !string.IsNullOrEmpty(verdedigingPlayer)))
{
await ToastService.CreateToast("Error: Selecteer 1 speler!");
return;
}
var methodOfScoring = GetSelectedGoalType();
var selectedPlayer = !string.IsNullOrEmpty(aanvalPlayer) ? aanvalPlayer : verdedigingPlayer;
var player = playerList.FirstOrDefault(player => player.Name == selectedPlayer);
var scoreString = $"{score.Item1} - {score.Item2}";
var attempt = new AttemptI
{
Id = Guid.NewGuid().ToString(),
SessionId = session.Id,
TeamId = session.TeamId,
PlayerId = player?.Id,
PlayerName = selectedPlayer,
Vak = string.IsNullOrEmpty(KorfbalTrackerHelpers.ConvertVakToString(player.Vak)) ? "" : KorfbalTrackerHelpers.ConvertVakToString(player.Vak),
DateTimeCreated = DateTime.Now,
Score = scoreString,
Time = time,
IsGoal = false,
AttemptContext = "",
AttemptMethod = !string.IsNullOrEmpty(methodOfScoring) ? "" : methodOfScoring,
AttemptLocation = locationInformation.Location,
AttemptXCoordinate = locationInformation.XCoordinate,
AttemptYCoordinate = locationInformation.YCoordinate
};
var result = await sqliteTeamDatabaseService.AddAttemptAsync(attempt);
if (result == 1)
{
await ToastService.CreateToast($"Kans {selectedPlayer}!");
Close();
}
else
{
await ToastService.CreateToast("Error: er is iets fout gegaan!");
}
}
private async Task HandleGoalClick(SessionI session, string time, LocationInformationI locationInformation, Tuple score, List playerList, Services.Interfaces.ISQLiteTeamDatabaseService sqliteTeamDatabaseService)
{
var aanvalPlayer = GetSelectedAanvalPlayer();
var verdedigingPlayer = GetSelectedVerdedigingPlayer();
if ((string.IsNullOrEmpty(aanvalPlayer) && string.IsNullOrEmpty(verdedigingPlayer))
|| (!string.IsNullOrEmpty(aanvalPlayer) && !string.IsNullOrEmpty(verdedigingPlayer)))
{
await ToastService.CreateToast("Error: Selecteer 1 speler!");
return;
}
var methodOfScoring = GetSelectedGoalType();
if (string.IsNullOrEmpty(methodOfScoring))
{
await ToastService.CreateToast("Error: Selecteer manier van scoren!");
return;
}
var selectedPlayer = !string.IsNullOrEmpty(aanvalPlayer) ? aanvalPlayer : verdedigingPlayer;
var player = playerList.FirstOrDefault(player => player.Name == selectedPlayer);
string scoreString;
if (locationInformation.IsOwnAttempt)
{
var scoreOwn = Convert.ToInt32(score.Item1);
scoreOwn++;
scoreString = $"{scoreOwn.ToString()} - {score.Item2}";
}
else
{
var scoreOpponent = Convert.ToInt32(score.Item2);
scoreOpponent++;
scoreString = $"{score.Item1} - {scoreOpponent.ToString()}";
}
var attempt = new AttemptI
{
Id = Guid.NewGuid().ToString(),
SessionId = session.Id,
TeamId = session.TeamId,
PlayerId = player?.Id,
PlayerName = selectedPlayer,
Vak = string.IsNullOrEmpty(KorfbalTrackerHelpers.ConvertVakToString(player.Vak)) ? "" : KorfbalTrackerHelpers.ConvertVakToString(player.Vak),
DateTimeCreated = DateTime.Now,
Score = scoreString,
Time = time,
IsGoal = true,
AttemptContext = locationInformation.IsOwnAttempt ? "Voor" : "Tegen",
AttemptMethod = methodOfScoring,
AttemptLocation = locationInformation.Location,
AttemptXCoordinate = locationInformation.XCoordinate,
AttemptYCoordinate = locationInformation.YCoordinate
};
var result = await sqliteTeamDatabaseService.AddAttemptAsync(attempt);
if (result == 1)
{
if (attempt.AttemptContext == "Voor")
{
await ToastService.CreateToast("GOAL!");
}
else
{
await ToastService.CreateToast("Tegen doelpunt!");
}
Close();
}
else
{
await ToastService.CreateToast("Error: er is iets fout gegaan!");
}
}
private void CancelButton_Clicked(object sender, EventArgs e) => Close();
private void ResetRadioButtons()
{
foreach (var child in RadioButtonGrid.Children)
{
if (child is RadioButton radioButton)
{
radioButton.IsChecked = false;
}
}
}
private string GetSelectedGoalType()
{
foreach (var child in RadioButtonGrid.Children)
{
if (child is RadioButton radioButton && radioButton.IsChecked)
{
return radioButton.Content.ToString();
}
}
return null;
}
private string GetSelectedAanvalPlayer()
{
return AanvalComboBox.SelectedItem as string;
}
private string GetSelectedVerdedigingPlayer()
{
return VerdedigingComboBox.SelectedItem as string;
}
}
}
[b] popup.xaml[/b]
[b] Журнал ошибок устройства [/b]
Time Device Name Type PID Tag Message
04-11 13:33:57.770 Samsung SM-G781B Error 18875 DEBUG backtrace:
#00 pc 00000000004c9b34 /system/lib64/libhwui.so (android::uirenderer::VectorDrawable::Path::Data::Data(android::uirenderer::VectorDrawable::Path::Data const&)+36) (BuildId: acf40743072550d9961cde5732825b9e)
#01 pc 00000000004d0de4 /system/lib64/libhwui.so (android::createPathData(_JNIEnv*, _jobject*, long)+36) (BuildId: acf40743072550d9961cde5732825b9e)
#02 pc 000000000220d804 /memfd:jit-cache (deleted) (art_jni_trampoline+116)
#03 pc 00000000022f62cc /memfd:jit-cache (deleted) (android.util.PathParser.-$$Nest$smnCreatePathData+108)
#04 pc 00000000022f618c /memfd:jit-cache (deleted) (android.util.PathParser$PathData.+140)
#05 pc 00000000022f5ff4 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VPath.+228)
#06 pc 00000000022f5db4 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VFullPath.+116)
#07 pc 00000000022f590c /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VGroup.+684)
#08 pc 00000000022f598c /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VGroup.+812)
#09 pc 00000000022f598c /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VGroup.+812)
#10 pc 0000000002170578 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VectorDrawableState.+408)
#11 pc 00000000021700b0 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable.+272)
#12 pc 00000000022f5590 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable.+128)
#13 pc 00000000022f5448 /memfd:jit-cache (deleted) (android.graphics.drawable.VectorDrawable$VectorDrawableState.newDrawable+152)
#14 pc 00000000025339e4 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState.+228)
#15 pc 0000000002533680 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable.+240)
#16 pc 00000000025334c0 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable.+128)
#17 pc 0000000002533378 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedVectorDrawable$AnimatedVectorDrawableState.newDrawable+152)
#18 pc 000000000218f6b0 /memfd:jit-cache (deleted) (android.graphics.drawable.DrawableContainer$DrawableContainerState.getChild+400)
#19 pc 0000000002185e58 /memfd:jit-cache (deleted) (android.graphics.drawable.DrawableContainer.selectDrawable+504)
#20 pc 0000000002530c88 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedStateListDrawable.selectTransition+776)
#21 pc 00000000025304f4 /memfd:jit-cache (deleted) (android.graphics.drawable.AnimatedStateListDrawable.onStateChange+196)
#22 pc 0000000002190738 /memfd:jit-cache (deleted) (android.graphics.drawable.Drawable.setState+184)
#23 pc 000000000257885c /memfd:jit-cache (deleted) (android.widget.CompoundButton.drawableStateChanged+204)
#24 pc 0000000000368774 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#25 pc 0000000000361de4 /apex/com.android.art/lib64/libart.so (bool art::interpreter::DoCall(art::ArtMethod*, art::Thread*, art::ShadowFrame&, art::Instruction const*, unsigned short, bool, art::JValue*)+1928) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#26 pc 000000000076f734 /apex/com.android.art/lib64/libart.so (void art::interpreter::ExecuteSwitchImplCpp(art::interpreter::SwitchImplContext*)+12208) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#27 pc 00000000003815d8 /apex/com.android.art/lib64/libart.so (ExecuteSwitchImplAsm+8) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#28 pc 0000000000189914 [anon:dalvik-classes.dex extracted in memory from /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/base.apk] (androidx.appcompat.widget.AppCompatRadioButton.drawableStateChanged+0)
#29 pc 00000000003535dc /apex/com.android.art/lib64/libart.so (artQuickToInterpreterBridge+1932) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#30 pc 000000000037f098 /apex/com.android.art/lib64/libart.so (art_quick_to_interpreter_bridge+88) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#31 pc 00000000023390f0 /memfd:jit-cache (deleted) (android.view.View.refreshDrawableState+128)
#32 pc 00000000025424b0 /memfd:jit-cache (deleted) (android.widget.CompoundButton.setChecked+144)
#33 pc 0000000000368774 /apex/com.android.art/lib64/libart.so (art_quick_invoke_stub+612) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#34 pc 0000000000353f24 /apex/com.android.art/lib64/libart.so (art::ArtMethod::Invoke(art::Thread*, unsigned int*, unsigned int, art::JValue*, char const*)+132) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#35 pc 0000000000355d78 /apex/com.android.art/lib64/libart.so (art::JValue art::InvokeVirtualOrInterfaceWithJValues(art::ScopedObjectAccessAlreadyRunnable const&, _jobject*, art::ArtMethod*, jvalue const*)+568) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#36 pc 00000000008c7798 /apex/com.android.art/lib64/libart.so (art::JNI::CallVoidMethodA(_JNIEnv*, _jobject*, _jmethodID*, jvalue const*)+172) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#37 pc 000000000088d7c4 /apex/com.android.art/lib64/libart.so (art::(anonymous namespace)::CheckJNI::CallMethodA(char const*, _JNIEnv*, _jobject*, _jclass*, _jmethodID*, jvalue const*, art::Primitive::Type, art::InvokeType) (.__uniq.99033978352804627313491551960229047428)+1556) (BuildId: a0856b3dbc826e8cee9d66738ac739d8)
#38 pc 00000000001a93ac /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#39 pc 00000000001a7db4 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#40 pc 000000000019d32c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#41 pc 000000000019b06c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#42 pc 00000000000c60d0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#43 pc 000000000025ea74 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (mono_runtime_invoke_checked+140) (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#44 pc 00000000002672cc /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#45 pc 0000000000223794 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#46 pc 000000000022ceec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#47 pc 00000000001a93c0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#48 pc 00000000001a7dec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#49 pc 000000000019d32c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#50 pc 000000000019b06c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#51 pc 00000000000c60d0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#52 pc 000000000025ea74 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (mono_runtime_invoke_checked+140) (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#53 pc 00000000002672cc /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#54 pc 0000000000223794 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#55 pc 000000000022ceec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#56 pc 00000000001a93c0 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#57 pc 00000000001a7dec /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#58 pc 000000000019d32c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#59 pc 00000000001a9718 /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#60 pc 00000000001a9c2c /data/app/~~KdIolE9iLPIVhoyVsQ7cXg==/com.companyname.korfbaltracker-nPvw9jE8k5Nw3s-0rq9LsQ==/lib/arm64/libmonosgen-2.0.so (BuildId: b429a6405c79e0852cf3694861f0a6c5234a833a)
#61 pc 0000000000008a24
04-11 13:33:57.770 Samsung SM-G781B Error 18875 DEBUG Cause: null pointer dereference
x0 b4000078227b06f0 x1 0000000000000000 x2 0000000000000000 x3 000000006fca98d8
x4 0000007fcd2d3af8 x5 0000007fcd2d3b84 x6 0000000014040338 x7 0000000000000028
x8 00000000000000b4 x9 4d99fc9e7f8e9475 x10 00000078b3c00178 x11 0000000000000000
x12 00000078b3c0162c x13 00000078b0368924 x14 00000078b03689a4 x15 0000005004247000
x16 000000793dfd7a70 x17 000000793dfc5f2c x18 000000795e04a000 x19 b4000078227b06f0
x20 0000000000000000 x21 b4000078b3c6f8c0 x22 b4000078b3d075c0 x23 0000000000000008
x24 0000000000000008 x25 0000000014040300 x26 000000006fec13a8 x27 000000006fb26a00
x28 000000006ff2ed10 x29 0000007fcd2d3b90
lr 00000079432d0de8 sp 0000007fcd2d3b90 pc 00000079432c9b34 pst 0000000060001000
Подробнее здесь: [url]https://stackoverflow.com/questions/79541190/net-maui-app-crashes-unpredictably-when-tapping-the-screen-to-create-a-popup[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия