我使用sqlite数据库文件中的列设置我的textview。问题是,当我来回更改视图时,从数据库中检索时存在非常明显的延迟。这是代码:
public class Flipcard extends Activity implements OnClickListener {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
LinearLayout layMain = (LinearLayout) findViewById(R.id.FlashCardFront);
layMain.setOnClickListener(this);
Cursor cur;
DbH db = null;
TextView tv=(TextView) findViewById(R.id.TV_Word);
TextView txtView=(TextView) findViewById(R.id.TV_CardNo);
try {
db=new DbH(this);
} catch (IOException e2) {
e2.printStackTrace();
}
try {
db.createdatabase();
} catch (IOException e) {
e.printStackTrace();
}
db.opendatabase();
cur=db.data();
cur.moveToFirst();
tv.setText(cur.getString(0));
cur.close();
}
public void onClick(View v) {
Intent i=new Intent(this,Flipcard_back.class);
startActivity(i);
}
}
点击时调用的另一个java文件是:
public class Flipcard_back extends Activity implements OnClickListener{
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_back);
LinearLayout layMain = (LinearLayout) findViewById(R.id.FlashCardRear);
layMain.setOnClickListener(this);
}
public void onClick(View v) {
Intent i=new Intent(this,Flipcard.class);
startActivity(i);
}
}
这实际上是调用前一个。问题是我是我的应用程序开发的一个非常初始阶段。现在我只是尝试使用我的数据库在第一个java文件中更改两个textview。当我来回切换时有一个大约一秒的滞后。我怎么纠正它?难道我做错了什么。 此外,我无法使用getstring(1)等检索所有行。为什么这样?我如何逐个获取列?
答案 0 :(得分:1)
延迟是由在主线程中访问数据库引起的,您希望它在自己的线程中运行。这是Processes and Thread上的开发人员指南,它将为您提供全面的概述。对于访问数据库的一种方法,请查看下一步的AsyncTask。
至于没有从数据库中获取结果,如果没有看到与db
相关联的类,我就无法分辨。如果您需要更多帮助,请在您的问题中包含该代码和任何logcat错误。
修改强>
使用您提供的错误代码,我发现此链接指向similar question and detailed answer.
答案 1 :(得分:0)
我从sqlite + android获得的经验是,它在查询数据库时最初非常慢,但之后它可以非常快速地检索大量数据。如果您想避免延迟,请改用文件。 我的小经验来自开发字典应用程序Wordlist Pro,我不得不放弃数据库中的文本文件,因为它太慢了(而且体积很大)。