2011-11-25 38 views
7

Tôi đã cố gắng làm việc thông qua ví dụ HelloAndroid cho ORMLite nhưng chưa thể biên dịch thành công. Tôi gặp sự cố với lớp DatabaseHelper. Cụ thể getDao() phương pháp:Ví dụ ORMLite dành cho Android sẽ không biên dịch

/** 
* Returns the Database Access Object (DAO) for our SimpleData class. 
* It will create it or return the cached value. 
*/ 
public Dao<SimpleData, Integer> getDao() throws SQLException { 
    if (simpleDao == null) { 
    simpleDao = getDao(SimpleData.class); 
    } 
    return simpleDao; 
} 

Đây là lỗi thời gian biên dịch Tôi nhận:

Loại thông số của D không thể được xác định; không có trường hợp tối đa duy nhất tồn tại cho loại biến D với cận trên com.j256.ormlite.dao.Dao, com.j256.ormlite.dao.Dao

+4

Điều này trông rất giống với [bug] sau (https://bugs.eclipse.org/bugs/show_bug.cgi?id=98379). Biên dịch hoạt động trong nhật thực, nhưng không phải với trình biên dịch java bình thường vì một vấn đề suy luận kiểu. Bạn biên dịch mã như thế nào? – CamilleLDN

+1

Tôi đang sử dụng IDE IntelliJ từ JetBrains đang chạy trên Ubuntu 10. – curtisthibault

+0

Tôi đồng ý với bạn @Mademoiselle Geek (tên thú vị). Hey curtisthibault, bạn đang sử dụng phiên bản Java nào trên Ubuntu của mình. Có vẻ như điều này được sửa trong 6u24-rev (b22) và 6u25 (b01). – Gray

Trả lời

7

tôi một lỗi tương tự khi cố gắng để xây dựng dự án ormlite tôi sử dụng Netbeans:

Biên soạn 15 file nguồn để ~/NetBeansProjects/Main/build/classes Main.java:74: loại thông số của D không thể được xác định; không có trường hợp tối đa duy nhất nào tồn tại cho biến kiểu D có giới hạn trên com.j256.ormlite.dao.Dao, com.j256.ormlite.dao.Dao pcDao = DaoManager.createDao (connectionSource, PC.class);

Do nhận xét tôi đã chuyển nền tảng Java từ OpenJDK 1.6 sang JDK 1.7.0_02 của Oracle và giải quyết được sự cố.

0

Giải pháp của tôi:

public class HelloAndroid extends OrmLiteBaseActivity<DatabaseHelper> 
{ 
    private final String LOG_TAG = getClass().getSimpleName(); 

    /** 
    * Called when the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     Log.i(LOG_TAG, "creating " + getClass() + " at " + System.currentTimeMillis()); 
    TextView tv = new TextView(this); 
     doSampleDatabaseStuff("onCreate", tv); 
     setContentView(tv); 
    } 

    /** 
    * Do our sample database stuff. 
    */ 
    private void doSampleDatabaseStuff(String action, TextView tv) 
    { 
     // get our dao 
     RuntimeExceptionDao<SimpleData, Integer> simpleDao = getHelper().getSimpleDataDao(); 
     // query for all of the data objects in the database 
     List<SimpleData> list = simpleDao.queryForAll(); 
     // our string builder for building the content-view 
     StringBuilder sb = new StringBuilder(); 
     sb.append("got ").append(list.size()).append(" entries in ").append(action).append("\n"); 

     // if we already have items in the database 
     int simpleC = 0; 
     for (SimpleData simple : list) 
     { 
      sb.append("------------------------------------------\n"); 
      sb.append("[").append(simpleC).append("] = ").append(simple).append("\n"); 
      simpleC++; 
     } 
     sb.append("------------------------------------------\n"); 
     for (SimpleData simple : list) 
     { 
      simpleDao.delete(simple); 
      sb.append("deleted id ").append(simple.id).append("\n"); 
      Log.i(LOG_TAG, "deleting simple(" + simple.id + ")"); 
      simpleC++; 
     } 

     int createNum; 
     do 
     { 
      createNum = new Random().nextInt(3) + 1; 
     } 
     while (createNum == list.size()); 
     for (int i = 0; i < createNum; i++) 
     { 
      // create a new simple object 
      long millis = System.currentTimeMillis(); 
      SimpleData simple = new SimpleData(millis); 
      // store it in the database 
      simpleDao.create(simple); 
      Log.i(LOG_TAG, "created simple(" + millis + ")"); 
      // output it 
      sb.append("------------------------------------------\n"); 
      sb.append("created new entry #").append(i + 1).append(":\n"); 
      sb.append(simple).append("\n"); 
      try 
      { 
       Thread.sleep(5); 
      } 
      catch (InterruptedException e) 
      { 
       // ignore 
      } 
     } 
     tv.setText(sb.toString()); 
     Log.i(LOG_TAG, "Done with page at " + System.currentTimeMillis()); 
    } 
} 
+4

Giải pháp là gì? Bạn đã thay đổi gì trong ví dụ để trả lời câu hỏi của @ curtisthibault? Bạn có thể giải thích thêm một chút được không? – Gray

Các vấn đề liên quan