提问人:ibe 提问时间:8/14/2014 最后编辑:ibe 更新时间:8/15/2014 访问量:1082
使用后台线程和 sqlite 在按钮单击时存储数据
Storing data on button click using background thread and sqlite
问:
[已解决] 我重新设计了整个事情:摆脱了单例模式,创建了插入值的方法并让 doInBackground() 调用它。
我有一个活动,里面有 2 个表单和一个按钮。因此,当单击按钮时,信息将存储在sqlite数据库中,一旦完成,按钮将设置为禁用。我正在使用 SQLiteOpenHelper 和 AsyncTask 来完成它。 我的问题:我应该在哪里实例化我的数据库?我错过了什么,有没有更好的方法来做这一切?
数据库助手:
public class DatabaseHelper extends SQLiteOpenHelper {
private static DatabaseHelper singleton=null;
synchronized static DatabaseHelper getInstance(Context context) {
if (singleton == null) {
singleton = new DatabaseHelper(context);
}
return singleton;
}
private DatabaseHelper(Context context) {
super(context, DBContract.DATABASE_NAME, null, DBContract.SCHEMA_VER);
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
db.beginTransaction();
db.execSQL(DBContract.WordTable.CREATE_TABLE);
db.setTransactionSuccessful();
}
finally {
db.endTransaction();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
public void saveWord(String theWord, String translatedWord) {
ContentValues newValues = new ContentValues();
newValues.put(DBContract.WordTable.THEWORD_COLUMN, theWord);
newValues.put(DBContract.WordTable.TRANSLATED_COLUMN, translatedWord);
SQLiteDatabase db = getWritableDatabase();
db.insert(DBContract.DATABASE_NAME, null, newValues);
}
}
主要活动:
public class MainActivity extends ActionBarActivity {
private DatabaseHelper dbhelper;
private EditText wordField, translatedField;
private Button addButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
DatabaseHelper.getInstance(getApplicationContext());
wordField = (EditText) findViewById(R.id.word_title);
translatedField = (EditText) findViewById(R.id.translated_title);
addButton = (Button) findViewById(R.id.addword_button);
addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
new WordSaveTask().execute(wordField.getText().toString(),translatedField.getText().toString());
}
});
}
private class WordSaveTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... params) {
dbhelper.saveWord(params[0], params[1]);
return null;
}
@Override
protected void onPostExecute(Void result) {
addButton.setEnabled(false);
}
}
}
答: 暂无答案
上一个:识别 SDL 中的像素数据格式
下一个:Xcode 文件夹和组混淆
评论
synchronized
synchronized public void ...
DatabaseHelper.getInstance(getApplicationContext())
AsyncTask<String, Void, Void>
doInBackground()
String... params
Void... params