SQLite-net似乎可以在除Android7.0之外的所有平台上工作。
到目前为止,在Android7.0上,从新安装开始,应用程序将崩溃,原因是SQLException无法创建PK。如果我卸载应用程序存储,即从应用程序设置擦除应用程序,然后应用程序完美地工作。
所有其他平台似乎立即安装。看看你自己,https://play.google.com/store/apps/details?id=com.purewowstudio.fivestartips
我似乎没办法解决这个问题。最糟糕的是,共享DB的我的iOS根本没有加载。
有人知道怎么解决这个问题吗?
代码示例:-
对象
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 = " ";
}
}
}数据库
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);
}
}
}初始化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);
}以下是我的项目目前正在引用的内容:-

发布于 2017-01-21 22:42:59
Android实际上开始强制执行访问Android附带的SQLite库的规则。因此,任何以前直接访问SQLite而没有经过特殊Java包装的应用程序(或应用程序库)在技术上已经违反了规则,这不是一个问题的原因是因为安卓从来没有真正执行过这些规则。阅读更多关于这里的信息
既然Android确实执行了这些规则,就会导致崩溃。我猜您正在使用SQLite.NetPCL库访问您的SQLite DB。如果您查看这里,就会发现库创建者从未修复过的确切问题。
我们遇到了同样的问题,然后切换到SQLite-notice库(请注意破折号而不是句点),它的工作方式完全相同,并且具有几乎相同的API。可以找到该库的链接这里。
发布于 2019-02-15 06:42:17
我也有同样的问题。我安装这个软件包是为了sqlite并将目标版本设置为Android8(奥利奥)我的应用程序再次工作
https://stackoverflow.com/questions/41785097
复制相似问题