Android SQLite和活动更新

Android SQLite和活动更新,android,sqlite,android-activity,Android,Sqlite,Android Activity,我在Android上有一个整洁的、可运行的SQLite数据库,它记录了物种观察结果。然后,我使用JSON(成功地)验证根据远程数据库上的一组参数输入的观察结果。在验证时,数据库中的一个标志被更新,表示该过程已经完成。但是,当我查看我的主要活动(文本)时,验证后带有标志的观察值不会更新 我的活动顺序是: 主活动(数据库中的obs=0) Obs进入活动 主要活动(obs=1,带有db的标志A) 数据管理活动,验证按钮 验证完成活动,主按钮 主要活动(obs=1,带有db的标志A) 如果我退出,或

我在Android上有一个整洁的、可运行的SQLite数据库,它记录了物种观察结果。然后,我使用JSON(成功地)验证根据远程数据库上的一组参数输入的观察结果。在验证时,数据库中的一个标志被更新,表示该过程已经完成。但是,当我查看我的主要活动(文本)时,验证后带有标志的观察值不会更新

我的活动顺序是:

  • 主活动(数据库中的obs=0)
  • Obs进入活动
  • 主要活动(obs=1,带有db的标志A)
  • 数据管理活动,验证按钮
  • 验证完成活动,主按钮
  • 主要活动(obs=1,带有db的标志A)
如果我退出,或者暂时离开它,然后返回到主活动,则数据库将被正确轮询,obs=1,带有db中的标志B

所以我知道我的数据库是正确的,SQL也是正确的。可能是我在错误的位置声明了我的按钮,活动才能正确恢复()

我的代码:

final Button verifySightingsButton = (Button) findViewById(R.id.uploadprocess);
if (verifies == 0) {
    verifySightingsButton.setTextColor(getResources().getColor(R.color.red));
} else {
    verifySightingsButton.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            // do stuff
        }
    });
}
其中“verifys”是标记A记录的数量。正在使用
onCreate()
方法调用该按钮。如果将其实例化为类变量,会有什么不同吗? 提前谢谢-烦死我了

更新:这是处理验证和更新标志的代码(实际上使用XML,而不是用于其他查询的JSON):

// Get details for an observation within loop
ArrayList d = (ArrayList) allVerifyRows.get(i);
// Build the URL to verify the data
String aURL = buildVerifyURL(d);
// Parse the XML
aValid = ParseVerificationXML.verifyXMLdata(aURL);
db.open();
Long bouCode = new Long((String) speciesList.get((String) d.get(3)));
boolean insert = db.updateNote(
    ((Long) d.get(0)).longValue(),
    ((Long) d.get(1)).longValue(),
    // and some other variables being updated
db.close();
以及用于检查数据库中是否存在已验证和未验证记录的代码:

NotesDbAdapter db = new NotesDbAdapter(this);
db.open();
Cursor c = db.fetchAllNotes();
species = new ArrayList<String>();
while (c.moveToNext()) {
    String str1 = c.getString(2); // Date
    species.add(str1);
}
c.close();

Cursor v = db.performNullCountForVerification();
if (v.moveToFirst()) {
    stillToVerify = v.getInt(0); // Non-Verified records
    readyForUpload = stillToVerify;
}
v.close();
stillToVerify = species.size() - stillToVerify;
db.close();
NotesDbAdapter db=新的NotesDbAdapter(此);
db.open();
游标c=db.fetchAllNotes();
物种=新阵列列表();
while(c.moveToNext()){
String str1=c.getString(2);//日期
添加(str1);
}
c、 close();
游标v=db.performNullCountForVerification();
如果(v.moveToFirst()){
stillToVerify=v.getInt(0);//未经验证的记录
readyForUpload=stillToVerify;
}
v、 close();
stillToVerify=species.size()-stillToVerify;
db.close();

您可以使用主活动的onResume方法来更新显示的值。onResume方法在每次活动出现在屏幕上时都会调用,而onCreate仅在创建活动时调用。

显示执行远程验证和数据库更新(一旦验证)的代码我想,我正在检查/测试,但这可能是因为我没有在两个游标之间分别使用db.close()和db.open()。初始测试证明是肯定的……你有一个例子吗?如果我理解正确,我的onCreate()有x行代码,我必须用新的onResume()方法复制相关代码?或者onResume()有吗只刷新没有“内容”的页面?很抱歉含糊其辞…谢谢你的评论BTWDRY-不要重复你自己。所以请不要重复代码。我的想法是将创建按钮的代码和更新UI/显示DB内容的代码分开。因此在onCreate()中您可以创建按钮并注册click listener,然后在onResume()中添加代码,根据DB状态更新UI,例如:VerifySightsButton.setTextColor(getResources().getColor(R.color.R