SQLite-net-PCL scheint auf allen Plattformen außer Android 7.0 zu funktionieren.SQLite-net-pcl funktioniert nicht ordnungsgemäß auf Android 7.0 (Xamarin)
Bisher auf Android 7.0 von einer Neuinstallation wird die Anwendung aufgrund einer SQLException mit dem Problem abstürzen, dass es keine PK erstellen kann. Wenn ich den Anwendungsspeicher Ie. Wische die App von den Anwendungseinstellungen ab, dann funktioniert die App einwandfrei.
Alle anderen Plattformen scheinen sofort zu installieren. Sehen Sie selbst https://play.google.com/store/apps/details?id=com.purewowstudio.fivestartips
Ich kann nicht scheinen, das zu beheben. Am schlimmsten ist, dass mein iOS, das einen DB PCL teilt, überhaupt nicht lädt.
Kann jemand das beheben?
Code-Beispiel: -
Objekt
using System;
namespace App.LocalObjects
{
[Preserve(AllMembers = true)]
public class LocalArticle
{
[SQLite.PrimaryKey, SQLite.Column("articleObjectId")]
public string objectId { get; set; }
public DateTime createdAt { get; set; }
public DateTime updatedAt { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Url { get; set; }
public int Status { get; set; }
public LocalArticle()
{
this.objectId = " ";
this.Title = " ";
this.Description = " ";
this.Url = " ";
}
}
}
Datenbank
using System;
using System.Linq;
using System.Collections.Generic;
using SQLite;
using App.LocalObjects;
namespace App.DataLayer
{
public class Database
{
static object locker = new object();
public SQLiteConnection database;
public string path;
public Database(SQLiteConnection conn)
{
database = conn;
database.CreateTable<LocalArticle>();
}
public int SaveLocalArticleItem(LocalArticle item)
{
lock (locker)
{
LocalArticle article = database.Table<LocalArticle>().FirstOrDefault(x => x.objectId == item.objectId);
if (article != null && article.objectId.Equals(item.objectId) && !article.updatedAt.Equals(item.updatedAt))
{
database.Update(item);
return item.ID;
} else {
return database.Insert(item);
}
}
}
-Code zu initialisieren DB:
using System;
using System.IO;
using Android.App;
using App.BusinessLayer.Managers;
using App.BusinessLayer.ParseObjects;
using App.Utils;
using Android.Content;
using Com.Nostra13.Universalimageloader.Core;
using Com.Nostra13.Universalimageloader.Core.Assist;
using Android.Graphics;
using Com.Nostra13.Universalimageloader.Cache.Memory.Impl;
using Com.OneSignal;
using Parse;
using SQLite;
namespace App.Droid
{
[Application(LargeHeap = true)]
public class App : Application
{
public static App Current { get; private set; }
public ModelManager modelManager { get; set; }
private SQLiteConnection conn;
private ImageLoader imageLoader;
public App(IntPtr handle, global::Android.Runtime.JniHandleOwnership transfer)
: base(handle, transfer)
{
Current = this;
}
public override void OnCreate()
{
base.OnCreate();
SetupParse();
SetupDB();
}
private void SetupParse()
{
ParseObject.RegisterSubclass<ParseArticle>();
ParseClient.Initialize(new ParseClient.Configuration
{
ApplicationId = Constants.ParseApplicationID,
Server = Constants.ParseServer
});
}
private void SetupDB()
{
var sqliteFilename = Constants.DBName;
string libraryPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
var path = System.IO.Path.Combine(libraryPath, sqliteFilename);
conn = new SQLiteConnection(path);
modelManager = new ModelManager(conn);
}
Hier ist, was mein Projekt zur Zeit verweist: -
Versuchen Sie, den Primärschlüssel 'objectId' in ein' int' zu ändern und fügen Sie dann auch die Annotation 'SQLite.AutoIncrement' hinzu. – hvaughan3
Hey @ hvaughan3. Ich habe es geschafft, mein Problem zu beheben. Nicht sicher wie überhaupt, aber scheint jetzt zu arbeiten. Ich schaffte es, von diesem Problem zu einem anderen überzugehen, das gerade gelöst wurde. –
Schön! Checke deinen Code ein und berühre ihn dann nicht mehr, damit er nicht wieder bricht;) – hvaughan3