2016-08-24 88 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; 
     }