Então cara, testei o mesmo código no emulador e no aparelho e ambos acontecem a mesma coisa. Sempre que eu consulto uma informação logo após salvar os objetos, sempre é retornado a informação correta.
Basta eu fechar o aplicativo e iniciar novamente que qualquer item que eu consulte não me retorne nada.
Agora os códigos que estou usando são os seguintes:
Salvar objetos:
public static String importarCarregadores() {
String retorno = new String();
PersistableManager manager = PersistableManager.getInstance();
try {
Sincronizacao sinc = SincronizacaoBD.consultarSincronizacao(manager, "carregador");
String carregadores = CarregadorWS.importarCarregadores((sinc == null) ? "" : sinc.getDataSincronizacao());
if (carregadores != null) {
JSONObject outer = new JSONObject(carregadores);
JSONObject inner;
String key;
Carregador carr;
ObjectSet os;
Enumeration e = outer.keys();
if (sinc == null) {
while (e.hasMoreElements()) {
key = (String) e.nextElement();
inner = outer.getJSONObject(key);
carr = new Carregador();
carr.setId(key);
carr.setNome(inner.getString("nom"));
carr.setLista(false);
manager.save(carr);
}
sinc = new Sincronizacao();
sinc.setTabela("carregador");
} else {
while (e.hasMoreElements()) {
key = (String) e.nextElement();
inner = outer.getJSONObject(key);
os = manager.find(Carregador.class, new CarregadorIdFilter(key), null);
if (os.size() > 0) {
carr = (Carregador) os.get(0);
} else {
carr = new Carregador();
carr.setId(key);
}
carr.setNome(inner.getString("nom"));
carr.setLista(false);
manager.save(carr);
}
}
sinc.setDataSincronizacao(Util.getDataServidor());
manager.save(sinc);
carregadores = null;
outer = null;
inner = null;
key = null;
carr = null;
os = null;
e = null;
sinc = null;
System.gc();
retorno = "Carregadores OK!\n";
} else {
retorno = "Nenhum Carregador!\n";
}
} catch (Exception ex) {
retorno = "ERRO: Carregadores!\n";
} finally {
try {
manager.shutdown();
} catch (Exception ex) {
}
}
return retorno;
}
Em resumo esse código se conecta ao meu servidor, executa uma consulta, formata os dados no padrão JSON, que logo após é lido, cria os objetos e os persistem. (Obs: cerca de 1200 objetos são pesistidos).
Consulta:
public static Carregador teste(String id) throws FloggyException {
Carregador c = new Carregador();
IndexFilter f = new IndexFilter("byId", new String(id));
ObjectSet os = Util.PM.find(Carregador.class, f, false);
if (os != null && os.size() > 0) {
os.get(0, c);
}
return c;
}
Floggy XML: (Mesma pasta do Build)
<?xml version="1.0" encoding="UTF-8"?>
<floggy xmlns:tns="http://floggy.sourceforge.net/floggy-persistence-1.4.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://floggy.sourceforge.net/floggy-persistence-1.4.0 http://floggy.sourceforge.net/schema/floggy-persistence-1.4.0.xsd"
generate-source="true">
<persistables>
<persistable class-name="teste.Carregador">
<record-store-name>Carregador</record-store-name>
<!--<persistable-strategy>single</persistable-strategy>-->
<indexes>
<index name="byId">
<field>id</field>
</index>
</indexes>
</persistable>
</persistables>
</floggy>
Adiciono no Build:
<property name="floggy.path" value="C:\Documents and Settings\rafael\Meus documentos\Rafael\Libs\Floggy 1.4\lib"/>
<path id="floggy.classpath">
<fileset dir="${floggy.path}" includes="*.jar"/>
</path>
<target name="post-compile">
<taskdef
name="floggy-persistence-weaver"
classname="net.sourceforge.floggy.persistence.WeaverTask"
classpathref="floggy.classpath"/>
<floggy-persistence-weaver
bootclasspath="${platform.bootclasspath}"
classpath="${libs.classpath}"
input="${build.classes.dir}"
output="${build.classes.dir}"
configurationfile="floggy.xml"/>
Ao fechar a aplicação tenho:
try {
PersistableManager.getInstance().shutdown();
} catch (Exception ex) {
ex.printStackTrace();
}
No geral é isso.
Ainda continuo com esse problema, não o que pode estar dando erro.