2017-01-21 6 views
0

SQLiteのネット-PCLは、Android 7.0を除くすべてのプラットフォーム上で動作するようにのように見えます。SQLiteのネット-PCLのAndroid 7.0で正常に動作していない(Xamarin)

は、これまでのAndroid 7.0への新鮮なからアプリケーションがPKを作成することができないという問題でのSQLExceptionが原因でクラッシュしますインストールします。アプリケーションストレージをアンインストールすると、アプリの設定からアプリケーションを消去すると、アプリは完全に動作します。

他のすべてのプラットフォームは即座にインストールされているようです。私はこの問題を解決することができないようyouself https://play.google.com/store/apps/details?id=com.purewowstudio.fivestartips

を参照してください。最悪の場合、DB PCLを共有する私のiOSはまったく読み込まれません。

誰でもこれを解決する方法を知っていますか?

コードの例: - DBを初期化する

オブジェクト

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); 
      } 
     } 
    } 

コード:

01ここで

は私のプロジェクトは、現在参照しているものです: -

enter image description here

+0

'int'に' objectId'主キーを変更してみてください、その後もそれに 'SQLite.AutoIncrement'アノテーションを追加します。 – hvaughan3

+0

ねえ@ hvaughan3。私は私の問題を修正することができました。どのようにしているのかは分かりませんが、現在は動作しているようです。私はこの問題から今解決された別のものに移行することができました。 –

+0

ニース!あなたのコードをチェックインしてからもう一度触れないようにしてください。) – hvaughan3

答えて

0

AndroidのNは、Androidが付属してSQLiteのライブラリへのアクセスを中心に、実際に設定するルールを開始しました。したがって、以前は特別なJavaラッパーを使わずに直接SQLiteにアクセスしていたアプリ(またはアプリライブラリ)は、既にルールを技術的に破っていました。今AndroidのNは、それらの規則を施行していること、それが発生するクラッシュを引き起こすことhere

については、こちらをご覧ください。私はあなたのSQLite DBにアクセスするためにSQLite.Net-PCLライブラリを使用していると推測しています。 hereを見ると、ライブラリ作成者が決して修正しなかったその正確な問題の未解決の問題があります。

私たちは、同じ問題に遭遇したとまったく同じように動作し、ほぼ同じAPIを持っているSQLiteの-NET-PCLライブラリー(ピリオドの代わりにダッシュを気づか)に切り替えているため。そのライブラリのリンクはhereです。

+0

こんにちは、はい、実際にこのライブラリにも移動しました。それは問題を引き起こしているものです。私はSQLite.Netを実行していましたが、それは動作していましたが、Android Nではポップアップがsqlite.soについての言葉を続けていました。私はその後、SQLite-net-plcにスワップしました。これで、AndroidとiOSの両方のプロジェクトが終了しました。他の誰もが働いているのは不思議そうだ。イムは何かを見逃していました。 Iveはこれを修正するために約1日を費やしていましたが、今は本当に立ち往生しています。 –

+0

@PhillWiggins次に、問題について何かを知るために実際のコードを確認する必要があります。 – hvaughan3

+0

ありがとう@ hvaughan3テーブルの作成に使用したオブジェクトクラスとデータベースクラスを追加しました。 –

関連する問題