Vielen Dank.. Manchmal sieht man einfach den Wald vor lauter Bäumen nicht mehr. Das klappt jetzt auch schon relativ gut, jedoch immer noch nicht zuverlässig. Der Versuch
"Mon Jan 23 14:55:09 +0000 2023" zu parsen schlägt wieder fehl.
folgendes (unprofessionell wirkendes) habe ich versucht, das nicht fehlerfrei klappt
string[] TimeSplits= _creation_date.Split(' ', '\t','\n','\r');
string dateString = $"{TimeSplits[0].Trim()} {TimeSplits[2].Trim()} {TimeSplits[1].Trim()} {TimeSplits[3].Trim()}";
string format = "ddd dd MMM hh:mm:ss";
if (DateTime.TryParseExact(dateString, format, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result))
{
return result.ToString();
}
else
{
return "No date time info";
}
das habe ich versucht
if (DateTime.TryParse(_creation_date, CultureInfo.InvariantCulture, DateTimeStyles.None, out DateTime result))
{
return result.ToString();
}
else
{
return "No date time info";
}
das habe ich versucht
if (DateTime.TryParseExact(_creation_date, "ddd MMM dd hh:mm:ss fffzzz yyyy", new CultureInfo("en-US"),DateTimeStyles.AssumeLocal, out DateTime dateTime))
{
return dateTime.ToString("dd.MM.yyyy hh:mm:ss");
}
Hallo zusammen,
Ich würde gerne den String "Sun Dec 13 03:52:21 +0000 2009" in eine "DateTime" parsen um ihn in einem andrerem Format darzustellen. Allerdings scheitern meine Versuche mit Parse, TryPars und TryParseExact. Hat jemand eine Idee?
Ich würde gerne eine RestApi nutzen. Dazu habe ich eine Client- Klasse erstellt und diese generisch gestaltet. Nun würde ich gern über "Try,Catch" etwaige Fehler abfangen. Allerdings bin ich mir nicht sicher wie ich mit den Fehlern umgehen soll. Wie wird hier normalerweise vorgegangen? Ich hatte den Aufbau so gewählt um Aufrufe an den Client zu vereinfachen und um den Client in den Tests Mocken zu können. Des weitern würde ich gern die Fehler in dieser Klasse abfangen, um in den Repositorys lediglich mit den empfangen bzw. nicht empfangenen Daten arbeiten zu können und dort weitestgehend ohne Exceptions-Handling aus zu kommen.
public class ApiClientService : IHttpClientService<string>
{
private HttpClient _httpClient;
public ApiClientService(HttpClient httpClient)
{
_httpClient = httpClient;
}
public ApiClientService()
{
_httpClient=new HttpClient();
}
public async Task<string> GetData(HttpRequestMessage httpRequestMessage, CancellationToken _Token)
{
try
{
using (var response = await _httpClient.SendAsync(httpRequestMessage, _Token))
{
//Logger implementeieren => success response
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
//Pass not String
if (body.GetType() != typeof(string))
{
//Logger implementieren
throw new Exception("return is no string");
}
return body;
}
}
catch (Exception exception)
{
}
}
}
Das hatte ich bereits versucht, leider gibt es hier mit der Kompatibilität zu bzw. ab Android 12 Probleme.. Dafür ist hier der Rest gut: hat ein Beispiel, das im VS nicht komplett rot leuchtet und eine relativ gute Doku...
Ich würde gerne eine Xamarin Forms/ Android - Anwendung schreiben die Bluetooth nutzt. Anfangs wollte ich eigentlich ein Plugin nutzen, jedoch komme ich mit den im Netz auffindbaren Plugins nicht klar. Beispielanwendungen sind meist veraltet ,zeigen im Code viele "Deprectated" - Fehler oder funktionieren erst gar nicht mehr, oder/und die Dokumentation ist zu kryptisch. Nun habe ich angefangen einen eigenen einfachen Client aufzusetzen. Einige Funktionen sind soweit vorhanden, so dass ich alle verbundenen Gerät bekomme und auch ein ausgewähltes Gerät verbinden kann. Ich würde jetzt gern noch die Umgebung nach verfügbaren Geräten absuchen, jedoch finde ich nun mehr seit 5 Tagen intensiver suche keine passende Lösung dazu. Ich währe hier für Hilfe vll. in Verbindung mit einer Erklärung sehr Dankbar! Die Verbindung wird via Interface aufgebaut.
ich würde gerne eine Applikation schreiben( Android / IOS ), die Bluetooth nutzt. Jetzt sind relativ viele Plugins zu finden. Mit welchen arbeitet ihr, bzw. welche sind gut zu händeln, gut dokumentiert und erprobt? Was empfehlt ihr?
Ich habe eine grundlegende Frage zu RESTful. Ich arbeite gerade an einem Videokurs, in dem werden Daten im JSON- Format von einer Webadresse abgerufen, formatiert und in eine App eingelesen. Nun ist meine Frage: Wie erkennt man, dass eine Seite Daten in diesem Format bereit stellt, bzw. eine derartige API unterstütz? Zudem wie erkennt man welche Datenfelder bereit gestellt werden?
Ich hab den Fehler gefunden! Mein Fehler war, dass ich das File via Drag-and-drop in den Dateiorder gezogen habe. Nachdem ich die Datei via " Vorhandenes Element Hinzufügen" im VisualStudio Hinzugefügt habe, hats geklappt! Danek euch allen für eure Hilfe.
Ich bekomme immer noch einen Fehler, weil er die Datei nicht findet. Ich habe die Datei auch schon mehrmals anders positioniert..
private List<Search> _searches;
public IEnumerable<Search> GetAll()
{
_searches = new List<Search>();
int i = 0;
string file = "StaedteUSA.txt";
using (StreamReader s = new StreamReader(Assembly.GetExecutingAssembly().GetManifestResourceStream("XamarinForms.LocationService.Resources." + file)))
{
while (s.EndOfStream == false)
{
string FileRow = s.ReadLine();
string[] DataSplit = FileRow.Split('\t');
i++;
_searches.Add(
new Search
{
Id = i,
Location = DataSplit[0] + ", " + DataSplit[1] + ", " + DataSplit[2],
CheckIn = DateTime.Parse(DataSplit[3]),
CheckOut = DateTime.Parse(DataSplit[4])
}
);
}
}
return _searches;
}
( Mir ist bewusst, dass das alles async sein sollte, jedoch geht`s hier wieder nur um ein einfaches Lernprojekt, an das ich eine veränderbare Datei anhängen möchte. )
Ok jetzt hüpfts, ich habe die csv als Ressource Eingebettet, das hat ihm nicht gefallen. Allerdings kann er jetzt die Datei nicht finden, egal wo ich sie hin packe.
Ich bin mir nicht sicher, ob ich korrekt bin, aber ich Versuche es einmal. Ich würde gern eine csv- Datei lesen unter Xamarin Forms, jedoch wenn ich den System.IO Namespace ein binde, bekomme ich einen Fehler, dass eine Datei fehlt unter Android. Ich habe auch versucht dem Android- Projekt das System.IO Nuget zu hinzuzufügen, jedoch ohne Erfolg. Weiß jemand Rat?
Ich würde einfach nur gern aus dem ausgewählten Item die Id abgreifen und mit dieser dann weiter arbeiten, ohne das ganze Model im VM abzufangen. Es geht wohl auch so, aber mir gefällt die LocationModel Property nicht im VM. Deshalb würde ich gerne nur die ID Binden. Das würde ich gern schon im XAML so Biden, dass direkt die Id aus dem Item übergeben wird. Oder ist dieses Handling falsch?
Ich würde gern einfach nur den Wert der ID des SelectedItem im VM binden und nicht das ganze Item. Aktuell bekomme ich das Item (das einem Model entspricht) nach der Selektierung.
Ich habe eine Listbox mit einem ItemTemplate. Dieses Template implementiert mehrere StackPanel mit Textblöcken , die an eine ObservableCollection im VM gebunden sind.
Nun würde ich gern lediglich einen Wert (ID) des gewählten Item zurück geben und nicht das ganze Item. Wie lässt sich das im XAML lösen? (Ein Model des Item hab ich angehängt)
Noch einmal vielen Dank! Deine Lösung hat mich weiter gebracht, da sie mich zu vielen interessanten Themen geführt hat und ich daran doch sehr viel gelernt habe! Ich habe nun das UnitOfWork- und Repository- Entwurfsmuster in Verbindung mit Dependency Injection Implementiert. Meine Lösung sieht wie folgt aus:
public ObservableCollection<LocationModel> WareHouseCollection { get; set; } = new();
public async void LoadingWarehousesAsync()
{
isWarehousesLoading = true;
if (WareHouseCollection.Count > 0)
WareHouseCollection.Clear();
using (var UoW = new MSSQLS_UnitOfWork(new MSSQLS_EFContext()))
{
var Locations = await Task.Run(() => UoW.Addresses.GetAllAsync());
foreach (var Location in Locations)
{
WareHouseCollection.Add(
new LocationModel()
{
Id = Location.Id,
City = Location.City,
HouseNumber = Location.HouseNumber,
Postcode = Location.Postcode,
StockName = Location.StockName,
Street = Location.Street,
});
}
}
isWarehousesLoading = false;
RaisePropertyChanged(nameof(WareHouseCollection));
RaisePropertyChanged(nameof(isWarehousesLoading));
}
nur eine Frage hätt ich noch, da ich den Ladevorgang am Anfang ja brauche und er aber nicht im Konstruktor sein soll, wie starte ich ihn am besten? Meine Idee wäre ein Event in der View gewesen, auf das ich mich registriere, ViewLoading eventuell.
Ich hätte gern gewusst wo beim MVVM-Muster die Validation statt findet. Mein Gedanke ist, dass die Validation im VM implementiert wird und über ein Event eine Messagebox in der View ausgelöst wird, wenn eine Validation fehl schlägt. Liege ich mit dieser Annahme richtig?
Arg viel mehr Code gibt es nicht. Meine erstellte Anwendung dient zum erlernen. Der Aufbau geht mit einem Repository-Pattern über eine UnitOfWork. In einer Consolen- Anwendung erstelle ich Abfragen. Erstellt wurde die Datenbank mit Code-First (@Abt => Wie im anderen Tread besprochen )
UoW:
public class MSSQLS_UnitOfWork : IUnitOfWork, IDisposable
{
private readonly MSSQLS_EFContext _context;
public IGatesRepository Gates { get; set; }
public IPlacesRepository Places { get; set; }
public IEmptysRepository Emptys { get; set; }
public IAddressRepsitory Addresses { get; set; }
public ITruckRegistrationRepository TruckRegistration { get; set; }
public MSSQLS_UnitOfWork(MSSQLS_EFContext context)
{
_context = context;
Gates = new MSSQLS_GatesRepository(_context);
Places = new MSSQLS_PlacesRepository(_context);
Emptys = new MSSQLS_EmptysRepository(_context);
Addresses = new MSSQLS_AddressRepository(_context);
TruckRegistration = new MSSQLS_TruckRegistrationRepository(_context);
}
public async Task CompleteAsync()
{
await _context.SaveChangesAsync();
}
public void Dispose()
{
_context.Dispose();
}
}
Address- Repository:
public class MSSQLS_AddressRepository : MSSQLS_Repository<Address>, IAddressRepsitory
{
public MSSQLS_AddressRepository(MSSQLS_EFContext context) : base(context)
{
}
}
Repository:
public class MSSQLS_Repository<T> : IRepository<T> where T : class
{
protected MSSQLS_EFContext _context;
internal DbSet<T> dbSet;
public MSSQLS_Repository(MSSQLS_EFContext context)
{
_context = context;
dbSet = context.Set<T>();
}
public virtual T Add(T t)
{
_context.Set<T>().Add(t);
_context.SaveChanges();
return t;
}
public virtual async Task<T> AddAsync(T t)
{
_context.Set<T>().Add(t);
await _context.SaveChangesAsync();
return t;
}
public int Count()
{
return _context.Set<T>().Count();
}
public async Task<int> CountAsync()
{
return await _context.Set<T>().CountAsync();
}
public virtual void Delete(T entity)
{
_context.Set<T>().Remove(entity);
_context.SaveChanges();
}
public virtual async Task<int> DeleteAsync(T entity)
{
_context.Set<T>().Remove(entity);
return await _context.SaveChangesAsync();
}
private bool disposed = false;
protected virtual void Dispose(bool disposing)
{
if (!disposed)
{
if (disposing)
{
_context.Dispose();
}
disposed = true;
}
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
public virtual T Find(Expression<Func<T, bool>> match)
{
return _context.Set<T>().SingleOrDefault(match);
}
public ICollection<T> FindAll(Expression<Func<T, bool>> match)
{
return _context.Set<T>().Where(match).ToList();
}
public async Task<ICollection<T>> FindAllAsync(Expression<Func<T, bool>> match)
{
return await _context.Set<T>().Where(match).ToListAsync();
}
public virtual async Task<T> FindAsync(Expression<Func<T, bool>> match)
{
return await _context.Set<T>().SingleOrDefaultAsync(match);
}
public virtual IQueryable<T> FindBy(Expression<Func<T, bool>> predicate)
{
IQueryable<T> query = _context.Set<T>().Where(predicate);
return query;
}
public virtual async Task<ICollection<T>> FindByAsync(Expression<Func<T, bool>> predicate)
{
return await _context.Set<T>().Where(predicate).ToListAsync();
}
public T GetById(int id)
{
return _context.Set<T>().Find(id);
}
public virtual async Task<T> GetByIdAsync(int id)
{
return await _context.Set<T>().FindAsync(id);
}
public IQueryable<T> GetAll()
{
return _context.Set<T>();
}
public virtual async Task<ICollection<T>> GetAllAsync()
{
return await _context.Set<T>().ToListAsync();
}
public IQueryable<T> GetAllIncluding(params Expression<Func<T, object>>[] includeProperties)
{
IQueryable<T> queryable = GetAll();
foreach (Expression<Func<T, object>> includeProperty in includeProperties)
{
queryable = queryable.Include(includeProperty);
}
return queryable;
}
public virtual void Save()
{
_context.SaveChanges();
}
public async virtual Task<int> SaveAsync()
{
return await _context.SaveChangesAsync();
}
public virtual T Update(T t, object key)
{
if (t == null)
return null;
T exist = _context.Set<T>().Find(key);
if (exist != null)
{
_context.Entry(exist).CurrentValues.SetValues(t);
_context.SaveChanges();
}
return exist;
}
public virtual async Task<T> UpdateAsync(T t, object key)
{
if (t == null)
return null;
T exist = await _context.Set<T>().FindAsync(key);
if (exist != null)
{
_context.Entry(exist).CurrentValues.SetValues(t);
await _context.SaveChangesAsync();
}
return exist;
}
}
Address Model:
public class Address
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Required]
public int Id { get; set; }
public string StockName { get; set; }
public string Postcode { get; set; }
public string City { get; set; }
public string Street { get; set; }
public string HouseNumber { get; set; }
public virtual ICollection<Place> Place { get; set; }
}
DbContext:
public class MSSQLS_EFContext : DbContext
{
public DbSet<Address> Addresses { get; set; }
public DbSet<Place> Places { get; set; }
public DbSet<Gate> Gates { get; set; }
public DbSet<TruckRegistration> TruckRegistrations { get; set; }
public DbSet<Empty> Emptys { get; set; }
}
Entschuldigung!
Es war wohl eine Unstimmigkeit im Context zur Datenbank, jetzt klappt erstellen einer Address und einem Place, aber mehre Places mit mehreren Gates boykottiert er!
System.InvalidOperationException: "Multiplicity constraint violated. The role 'Gate_Place_Target' of the relationship 'EFCoreToMSSQLS.Gate_Place' has multiplicity 1 or 0..1."
Die ID`s werden via autoincrement in der Datenbank generiert, im Model habe ich das so angegeben:
public class Address
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Required]
public int Id { get; set; }
public string StockName { get; set; }
public string Postcode { get; set; }
public string City { get; set; }
public string Street { get; set; }
public string HouseNumber { get; set; }
public virtual ICollection<Place> Place { get; set; }
}
Verwendetes Datenbanksystem: <Entity Framework mit MSSQL_Server ->
Hallo Zusammen, ich habe den im Anhang befindlichen Datenbankaufbau. Nun würde ich gern einen Datensatz hinzufügen, jedoch habe ich Schwierigkeiten mit der Tabelle "Gates". Es werden zwar ID`s beim Erstellen des Adress- Datensatz für die "Places" erstellt, jedoch nicht für die "Gates" , was in einem Error endet.