相关疑难解决方法(0)

并发写入android数据库(来自多个服务)?

我对android sqlite数据库和并发写入存在严重问题.为了更好的解释,我会给你一个真实的例子:

我有一个桌面小部件,我正在显示我的数据库中的项目列表(在后台我有DataService,它定期从我的远程服务器收集新数据,并用它们更新我的数据库).所以 - 当我点击列表中的某个项目时,我需要更新数据库中的点击项目(=写入操作).但是,当我完全点击项目时,当DataService正在更新我的数据库中的新数据时,它当然会记录如下错误:

android.database.sqlite.SQLiteException: error code 5: database is locked
Run Code Online (Sandbox Code Playgroud)

通常很难模拟,但如果你安排DataService每10秒运行一次(仅用于演示),你可以很容易地模拟这个错误.

我的问题是,如何处理这个?我在文档中读到,如果同时有两个写入事件,则只会执行第一个,第二个将被记录为错误.它听起来很奇怪,必须有另一个选项,例如第二次写入会等到第一次写完.或者其他解决方案?试图阅读文档,但似乎,这个项目在谷歌文档中不是很好...几乎我拥有的每一个信息,我在官方网页以外找到.

PS:这是我的DBHelper类的缩短版本:

public class DBHelper extends SQLiteOpenHelper {

    private static final String TABLE_NEWS = "News";    
    private static final String COL_ID = "id";
    private static final String COL_TITLE = "title";
    private static final String COL_ALERT = "alert";

    public DBHelper(Context context) {
        super(context, "MY_DB_NAME", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NEWS + "(" + COL_ID + " TEXT PRIMARY KEY," + COL_TITLE …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-service sqliteopenhelper

12
推荐指数
2
解决办法
1万
查看次数

当我回按钮时,前一个Activity中的值丢失,但是当调用this.finish()时则没有

所以我有一个奇怪的问题.我正在进行2项活动.其中一个活动显示一个ListView,其数据通过一个很长的Extra来获取,我用它来通过database.query中的WHERE子句获取结果.单击ListView项时会调用另一个Activity,允许某人向ListView的数据库添加内容.

活动名称是DaysActivity.java(列表视图DayAddActivity.java的活动)和(允许某人添加一天的活动,然后显示在DaysActivity.javaListView中).

我遇到的问题是,当finish() DayAddActivity.java它返回时DaysActivity,ListView仍然完全填充.但是,如果我点击后退按钮DayAddActivity.java(带有我的应用程序图标的操作栏中标题左侧的按钮),当它返回到DaysActivity.java时,ListView为空/消失.

下面是两个代码:

DaysActivity.java:

package com.gauvion.gfit;

import android.annotation.SuppressLint;
import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;

public class DaysActivity extends ListActivity {

    private DaysDataSource datasource;
    private SimpleCursorAdapter dataAdapter;
    private boolean isEditing = false;
    private Toast toast_deleted;
    private String[] columns = new String[] { MySQLiteHelper.COLUMN_NAME, MySQLiteHelper.COLUMN_DAY };
    private int[] to;
    private long routineDataID;
    private String …
Run Code Online (Sandbox Code Playgroud)

android android-intent extra android-activity

5
推荐指数
1
解决办法
5504
查看次数