2016-08-24 11 views
-3

あなたはandroid realm javaで自動インクリメンタルIDを設定する方法を知っていますか、私は現時点でrealmにはsqliteのようなサポートが組み込まれていません。Android realm-javaで自動インクリメントIDを設定するには?

+0

StackOverflowの上の完全なコードを求めるのではなく、いくつかのコーディング作業を行い、その後、予想通り –

+0

シェアすでに試したコードを削除する提案やバグのために頼むが、動作していないと、それが与える場合もlogcatを共有しないでください。エラー –

+0

私のコードを共有しました。解決策として以下を見てください。 –

答えて

0

私は質問のために働いて何かを得たと思いますが、私はそれが全体に持っているものを傷つけるかわからないが、私はしかし、その少し遅いと感じていますが、とにかく以下のコードです: ロジックは次のとおりです。

  1. その空、その空の場合は、他の1ない空に設定情報でarticleID値は、その後情報でarticleIDの最後の最高値を取得作る場合RealmObject(例はそれがRealmobjectを拡張DbArticle.java)
  2. チェックデータオブジェクトを取得します 1、それから新しいデータが領域データベースに追加されるとこれを思い出してください。

コード:

DbArticle.javaがある:私はちょうど挿入またはレルムへの書き込みをwriteArticle(と呼ばれる方法)を作成した後

public class DbArticle extends RealmObject { 
    private String articleTitle,articleDate,articleDescription,articleImage,articleAudioFile; 
    private boolean articleIsReadYet; 
    private int articleID; 

    public String getArticleTitle() { 
     return articleTitle; 
    } 

    public void setArticleTitle(String articleTitle) { 
     this.articleTitle = articleTitle; 
    } 

    public String getArticleDate() { 
     return articleDate; 
    } 

    public void setArticleDate(String articleDate) { 
     this.articleDate = articleDate; 
    } 

    public String getArticleDescription() { 
     return articleDescription; 
    } 

    public void setArticleDescription(String articleDescription) { 
     this.articleDescription = articleDescription; 
    } 

    public String getArticleImage() { 
     return articleImage; 
    } 

    public void setArticleImage(String articleImage) { 
     this.articleImage = articleImage; 
    } 

    public String getArticleAudioFile() { 
     return articleAudioFile; 
    } 

    public void setArticleAudioFile(String articleAudioFile) { 
     this.articleAudioFile = articleAudioFile; 
    } 

    public boolean isArticleIsReadYet() { 
     return articleIsReadYet; 
    } 

    public void setArticleIsReadYet(boolean articleIsReadYet) { 
     this.articleIsReadYet = articleIsReadYet; 
    } 

    public int getArticleID() { 
     return articleID; 
    } 

    public void setArticleID(int articleID) { 
     this.articleID = articleID; 
    } 
} 

は、以下を参照:

public void writeArticle(String ... args){ 
     Realm realm = Realm.getDefaultInstance(); 
     realm.beginTransaction(); 
     DbArticle conx = realm.createObject(DbArticle.class); // Create a new object 
      conx.setArticleTitle(args[0]); 
     // Log.e("xxx","--->wrote:"+args[0]); 
      conx.setArticleDescription(args[1]); 
      conx.setArticleDate(args[2]); 
      conx.setArticleImage(args[3]); 
      conx.setArticleIsReadYet(false); 
      conx.setArticleAudioFile(args[4]); 
     String VideoUrl=args[5]; 
       RealmResults<DbArticle> results = realm.where(DbArticle.class).findAll(); 
        if (results.isEmpty() && results.size() < 1) { 
         final int INIT_ID = 0; 
         conx.setArticleID(INIT_ID); 

        } else { 
         final int ADD_ID = 1; 
         conx.setArticleID(
           results.max("articleID").intValue() + ADD_ID 
         ); 
        } 


     realm.commitTransaction(); 
     realm.close(); 
    } 

これは私のために働いていますが、記事IDは@PrimaryKeyアノテーションで設定されていませんのでご注意ください!

だから、みんな、このコードが持っている挫折と、コードを修正してよりうまくいくように修正できるかどうかを教えてください。

0

RealmObjectを拡張しているモデルクラスの名前を渡し、カラム名 "con_id"をModelクラスのidフィールド(主キー)に変更します。

このメソッドを呼び出すと、新しいIDを持つ新しいレコードを挿入するために使用できる1つのIDが与えられます。

public static long getUniqueId(Realm realm, Class className) { 
      Number number = realm.where(className).max("con_id"); 
      if (number == null) return 1; 
      else return (long) number + 1; 
     } 
関連する問題