2016-08-24 86 views
-3

你知道如何在android realm java中设置自动增量ID吗,我知道在这个时候没有内置的支持,就像sq lite一样。如何在Android realm-java中设置自动增量ID?

+0

不要问在计算器上完整的代码,而不是做一些编码工作,然后寻求建议或错误删除 –

+0

份额你已经尝试过的代码,但没有按预期工作,如果它也提供了共享的logcat一个错误 –

+0

我已经分享了我的代码,请看下面的解决方案 –

回答

0

我觉得我有东西给这个问题的工作,但我不知道有什么危害有整个但我觉得它有点虽然缓慢,但反正下面是代码: 的逻辑是:

  1. 得到RealmObject(例如DbArticle.java它扩展Realmobject)
  2. 检查数据对象,如果其空,如果为空,则使条款ArticleID值设置为1,否则不为空,则获得最后最高条款ArticleID的价值然后添加1,随着新数据被添加到领域数据库,不断回顾这一点。

代码:

的DbArticle.java是:

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

然后创建)称为writeArticle(的方法只是为了插入或写入到境界,见下文:

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

所以这对我很有用,但是articleID未设置@PrimaryKey注释请注意!

所以,大家试试看,并告诉我这段代码有什么挫折,如果有人可以修复代码做得更好。

0

传递正在扩展RealmObject的model类的名称,并将列名称“con_id”更改为Model类的id字段(主键)。

调用这个方法,它会给你一个id,你可以使用它来插入任何带有新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; 
     }