2014-03-12 82 views
0

我正在使用db4o lib來存儲數據。如何爲所有類的類(對象)創建通用方法

例如我有這樣的代碼,用於存儲數據(即新聞)

public static void insertNewsToDB(Context context, final News news){ 
     final String dbPath = context.getDir("news", Context.MODE_PRIVATE) + "/" + DB4O_NAME; 
     ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath); 
     try { 
      db.store(news); 
      db.commit(); 
     } finally { 
      db.close(); 
     } 
    } 

,並從數據庫中該得到的數據:

public static List<News> getNewsListFromDB(Context context){ 
     final List<News> news = new ArrayList<News>(); 
     final String dbPath = context.getDir("news", Context.MODE_PRIVATE) + "/" + DB4O_NAME; 
     ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath); 
     try { 
      ObjectSet<News> result = db.queryByExample(News.class); 
      news.addAll(result); 
     } finally { 
      db.close(); 
     } 

     return news; 
    } 

我怎麼可以創建方法,所以它不依賴於什麼類型我必須通過。更清楚它不取決於第二個參數是新聞,用戶或其他東西。當我想從db獲得新聞時也是如此。

我需要創建不依賴於類的類的一般方法。

編輯:我這樣做,但我不工作。更清楚地嘗試獲取列表,它什麼都不返回我不明白爲什麼 我做錯了什麼

public static void insertToDB(Context context, final Object obj,final String _key) { 
     final String dbPath = context.getDir(_key, Context.MODE_PRIVATE) + "/" + DB4O_NAME; 
     ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath); 
     try { 
      db.store(obj); 
      db.commit(); 
     } finally { 
      db.close(); 
     } 
    } 
    public static <T> void insertToDB(Context context, final List<T> newsList,String _key) { 
     for (T news : newsList) { 
      insertToDB(context, news,_key); 
     } 
    } 

    public static <T> List<T> getListFromDB(Context context, final java.lang.Class<T> tClass,final String _key) { 
     final List<T> news = new ArrayList<T>(); 
     final String dbPath = context.getDir(_key, Context.MODE_PRIVATE) + "/" + DB4O_NAME; 
     ObjectContainer db = Db4oEmbedded.openFile(Db4oEmbedded.newConfiguration(), dbPath); 
     try { 
      ObjectSet<T> result = db.queryByExample(tClass); 
      news.addAll(result); 
     } finally { 
      db.close(); 
     } 
     return news; 
    } 
+0

「我做這個,但我沒有工作,我做了什麼ng「這裏的問題究竟是什麼? – Smutje

+0

當你嘗試時發生了什麼?永遠不要在提問時停下來「不起作用」。這完全不是一個完整的問題。告訴我們什麼是問題。 –

+0

當我嘗試從db的getList它不返回。我不明白這裏插入或getList – pmb

回答

0

使用對象作爲方法的參數類型 或者你也可以根據用戶自己的需要

0

泛型(?或T)如果您需要任何類型的信息,你可以簡單地切換NewsObject。如果你需要類型信息(即持久化對象堅持某個接口),引入一個泛型類型參數。

public static <T extends SomeClass> void insertEntityToDB(Context context, final T entity) { 
    // ... 
} 

public static <T extends SomeClass> List<T> getEntityListFromDB(Context context) { 
    // ... 
} 
+0

謝謝@Smutje你的回答,我只是編輯我的答案,你可以看看,並告訴我什麼錯在那裏? – pmb

0

您需要在方法調用中實現泛型的概念。

公共靜態無效insertNewsToDB(上下文的背景下,最終新聞新聞)

將變更爲

public static void insertNewsToDB(Context context, final <T> T) 

而且

public static List<News> getNewsListFromDB(Context context) 

將變更爲

public static List<T> getNewsListFromDB(Context context) 
相關問題