2011-11-25 9 views
7

He estado intentando trabajar con el ejemplo HelloAndroid para ORMLite pero no he podido compilar correctamente. Tengo un problema con la clase DatabaseHelper. En concreto, el método getDao():Ejemplos de ORMLite para Android no compilarán

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

Aquí está el error en tiempo de compilación que estoy recibiendo:

parámetros de tipo de D no pueden ser determinados; no existe ninguna instancia máxima única para el tipo variable D con límites superiores com.j256.ormlite.dao.Dao, com.j256.ormlite.dao.Dao

+4

Esto se parece mucho al siguiente [error] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=98379). La compilación funciona en eclipse, pero no con el compilador de Java normal debido a un problema de inferencia de tipo. ¿Cómo estás compilando el código? – CamilleLDN

+1

Estoy usando el IntelliJ IDE de JetBrains que se ejecuta en Ubuntu 10. – curtisthibault

+0

Estoy de acuerdo contigo @Mademoiselle Geek (nombre genial). Hey, curtisthibault, qué versión de Java estás usando en tu Ubuntu. Parece que esto está arreglado en 6u24-rev (b22) y 6u25 (b01). – Gray

Respuesta

7

llegué un error similar al intentar construir mi proyecto ormlite usando Netbeans:

compilación de archivos de origen 15 a ~/NetBeansProjects/Main/build/classes Main.java:74: parámetros de tipo de D no pueden determinarse; no existe una instancia máxima única para la variable de tipo D con los límites superiores com.j256.ormlite.dao.Dao, com.j256.ormlite.dao.Dao pcDao = DaoManager.createDao (connectionSource, PC.class);

Debido a los comentarios cambié mi plataforma Java de OpenJDK 1.6 a Oracle JDK 1.7.0_02 y resolvió el problema.

0

Mi solución:

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

¿Cuál es la solución? ¿Qué cambiaste en el ejemplo para responder la pregunta de @ curtisthibault? ¿Puedes explicarlo un poco más por favor? – Gray

Cuestiones relacionadas