首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQLite-net-pcl在Android7.0上不能正常工作(Xamarin)

SQLite-net-pcl在Android7.0上不能正常工作(Xamarin)
EN

Stack Overflow用户
提问于 2017-01-21 22:10:45
回答 2查看 4.1K关注 0票数 0

SQLite-net似乎可以在除Android7.0之外的所有平台上工作。

到目前为止,在Android7.0上,从新安装开始,应用程序将崩溃,原因是SQLException无法创建PK。如果我卸载应用程序存储,即从应用程序设置擦除应用程序,然后应用程序完美地工作。

所有其他平台似乎立即安装。看看你自己,https://play.google.com/store/apps/details?id=com.purewowstudio.fivestartips

我似乎没办法解决这个问题。最糟糕的是,共享DB的我的iOS根本没有加载。

有人知道怎么解决这个问题吗?

代码示例:-

对象

代码语言:javascript
复制
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 = " ";
    }
}
}

数据库

代码语言:javascript
复制
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:代码:

代码语言:javascript
复制
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);
}

以下是我的项目目前正在引用的内容:-

EN

回答 2

Stack Overflow用户

发布于 2017-01-21 22:42:59

Android实际上开始强制执行访问Android附带的SQLite库的规则。因此,任何以前直接访问SQLite而没有经过特殊Java包装的应用程序(或应用程序库)在技术上已经违反了规则,这不是一个问题的原因是因为安卓从来没有真正执行过这些规则。阅读更多关于这里的信息

既然Android确实执行了这些规则,就会导致崩溃。我猜您正在使用SQLite.NetPCL库访问您的SQLite DB。如果您查看这里,就会发现库创建者从未修复过的确切问题。

我们遇到了同样的问题,然后切换到SQLite-notice库(请注意破折号而不是句点),它的工作方式完全相同,并且具有几乎相同的API。可以找到该库的链接这里

票数 1
EN

Stack Overflow用户

发布于 2019-02-15 06:42:17

我也有同样的问题。我安装这个软件包是为了sqlite并将目标版本设置为Android8(奥利奥)我的应用程序再次工作

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41785097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档