标签: android-sqlite

Android java.lang.IllegalStateException:无法初始化游标窗口

我在谷歌播放崩溃报告上有这个错误,不知道如何解决它:

java.lang.IllegalStateException: Couldn't init cursor window
at android.database.CursorWindow.native_init(Native Method)
at android.database.CursorWindow.<init>(CursorWindow.java:41)
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:276)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:268)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:171)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:248)
at com.jim2.UpdateService.restaureNotifications(UpdateService.java:274)
at com.jim2.helpers.Globals.updateWidgets(Globals.java:1011)
at com.jim2.helpers.Globals.onReceive(Globals.java:746)
at com.jim2.UpdateService$5.onSignalStrengthsChanged(UpdateService.java:747)
at android.telephony.PhoneStateListener$2.handleMessage(PhoneStateListener.java:387)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:130)
at android.app.ActivityThread.main(ActivityThread.java:3693)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:507)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:907)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:665)
at dalvik.system.NativeStart.main(Native Method)
Run Code Online (Sandbox Code Playgroud)

这是我的代码谁崩溃:

    DataBaseHelper d = new DataBaseHelper(context);
    Cursor c = d.getNotifications(false);
    SharedPreferences preferences;
    String ns = Context.NOTIFICATION_SERVICE;

    NotificationManager mNotificationManager = (NotificationManager)context.getSystemService(ns);

    CharSequence tickerText = "";

    if(c!=null && c.moveToFirst()){ // CRASH HERE :(

        do{
                       .... …
Run Code Online (Sandbox Code Playgroud)

database android cursor illegalstateexception android-sqlite

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

在Android中使用sqlite事务时出现多个线程问题

我在Android中使用sqlite事务:

SQLiteDatabase database = sqlite_helper.getWritableDatabase();

database.beginTransaction();
...
database.setTransactionSuccessful();
database.endTransaction();
Run Code Online (Sandbox Code Playgroud)

我的问题是:
1.我应该endTransaction()像这样放在finally代码块中:

try {
    database.beginTransaction();
    ...
    database.setTransactionSuccessful();
}
finally {
    database.endTransaction();
}
Run Code Online (Sandbox Code Playgroud)

如果在数据库操作期间出现异常,数据库是否会自动回滚而不使用"finally"?

  1. 当事务没有结束时,其他线程可以读取或写入相同的数据库吗?我听说Android中的sqlite是安全的线程,但我不确定它.我想在交易过程中会遇到一些问题.如果另一个线程使用相同的连接写入相同的数据库,是否会引发错误?
    我在我的应用程序中发现了这个错误,但我不知道它是否与线程安全问题有关:

android.database.sqlite.SQLiteMisuseException: library routine called out of sequence:

,编译时

有没有人帮我回答这些问题?非常感谢!

sqlite android android-sqlite

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

Android - 尝试重新打开已经关闭的对象:使用loaderManager的SQLiteQuery

我对Android很新,我对过滤的listView和从横向模式更改为纵向模式或反之亦然的活动有一些问题.我有一个editText用于过滤"drinkSearch",只要我不改变视角(人像与风景),这个过滤就有效.这是我得到的错误:

java.lang.IllegalStateException:尝试重新打开已经关闭的对象:SQLiteQuery:SELECT _id,name FROM drinks

正如您在下面的代码中看到的,我使用了接口LoaderManager.LoaderCallbacks,这个概念对我来说有点新,我不确定哪里出了问题.我将非常感谢所有的帮助,在此先感谢!

public class Drinks_Fragment extends Fragment实现LoaderManager.LoaderCallbacks {

private static final int DRINKS_LIST_LOADER = 0x01;
private SimpleCursorAdapter adapter;
private ListView drinksList;
private String LOG;
private EditText drinkSearch;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.drinks_list, container, false);
    drinkSearch = (EditText)view.findViewById(R.id.drinkInputSearch);
    drinksList = (ListView) view.findViewById(R.id.drinksList);
    drinksList.setEmptyView(view.findViewById(R.id.empty_list_view));

    String[] from = {DrinksTable.COLUMN_NAME};
    int[] to = {R.id.drinkName};
    getLoaderManager().initLoader(DRINKS_LIST_LOADER, null, this);
    adapter = new SimpleCursorAdapter(getActivity().getApplicationContext(), R.layout.drinks_list_item,null, from, to, 0);
    drinksList.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)

在这部分中,我根据searchDrink editText中输入的字符串向contentProvider询问新的Cursor.(以下代码,直到"返回视图"正好在上面的部分下方,同样的onCreateView方法)

    drinkSearch.addTextChangedListener(new TextWatcher() { …
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-listview android-loadermanager android-sqlite

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

使用AsyncTask从数据库中读取项目

我决定AsyncTask在我的应用程序中添加一个片段,以便更有效地从数据库接收项目.

我将我的泛型设置为Void, Void, List<Object>(Object我创建的对象在哪里),内部方法如下:

private class GetObjectsTask extends AsyncTask<Void, Void, List<Object>> {

    @Override
    protected List<Object> doInBackground(Void... params) {
        SQLiteDatabase db = mDbHelper.getInstance(getActivity().getApplicationContext()).getReadableDatabase();

        String[] projection = {
                .........
        };

        String sortOrder = ...;

        Cursor c = db.query(TABLE_NAME, projection, null, null, null, null, sortOrder);

        while(c.moveToNext()) {
            long itemId = ...;
            String title = ...;
            long startMil = ...;
            long endMil = ...;

            mList.add(new Object(itemId, title, new Date(startMil), new Date(endMil), null, null));
        }

        db.close();
        return mList;
    } …
Run Code Online (Sandbox Code Playgroud)

performance android android-asynctask android-sqlite

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

搜索数据库中的项目并显示下拉列表

我有以下应用程序架构(为简化而推广):

main Layout由ActionBar自定义View和可滚动Tabs以及ViewPager托管多个组成ListFragments.每个ListFragment都有自己的数据集(1行= ImageView+ TextView),从SQLite数据库加载.在我的ActionBar's自定义中View有一个"搜索" EditText.

当用户开始输入内容时,我想在数据库中执行"移动中"搜索,并以下拉列表的形式显示匹配的名称(这些名称应该是可点击的).我看到了一些如何在a中执行搜索的示例ListView,但与数据库搜索无关.

所以问题是:如何将数据库搜索结果显示为下拉列表,并在用户添加或删除字符时随时刷新它?

android android-sqlite android-search

2
推荐指数
2
解决办法
7432
查看次数

在Fragment中打开Android Sqlite数据库

我正在尝试打开并写入Android中的Sqlite数据库.根据日志输出,它没有打开.我知道我的语法不是很好,我应该从Party对象而不是直接从片段接口保存,但我的重点是在过程中.任何帮助都会非常有帮助!

package com.android.sqldatabase.sqldatabaseapp;

//imports deleted to save space

public class SqlDatabase {

public static final String KEY_ROWID = "_id";
public static final String KEY_NAME = "name";
public static final String KEY_PARTY = "party_date";
    public static final String KEY_STATE = "state";
public static final String KEY_JDATE = "j_date";
public static final String KEY_JTITLE = "j_title";
public static final String KEY_JENTRY = "j_entry";
public static final String KEY_JRATING = "j_rating";
    public static final String KEY_JENTRYEDITION = "j_entryEdition";

private static final String DATABASE_NAME …
Run Code Online (Sandbox Code Playgroud)

sqlite android android-fragments android-sqlite

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

仅一次将数据添加到sqlite数据库并多次读取

我是新来的sqlite.在我的android项目中,我有一个数据库,我只需要将这些数据一次添加到应用程序.(不要在app运行时每次都插入数据).我怎样才能完成这项任务?

我试着创造

public class DatabaseHandler extends SQLiteOpenHelper {

}
Run Code Online (Sandbox Code Playgroud)

并在onCreate方法中调用此类MainActivity

sqlite android android-sqlite

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

DBFlow'算作'

我想在DBFlow中执行以下语句:

SELECT SECTION_ID, COUNT(SECTION_ID) AS SECTION_COUNT FROM ARTICLES GROUP BY SECTION_ID ORDER BY SECTION_COUNT DESC
Run Code Online (Sandbox Code Playgroud)

我尝试的是:

Select(Article_Table.sectionId).from(Article.java).count(???) ...
Run Code Online (Sandbox Code Playgroud)

该流对象有一个count()方法,但它需要一个DatabaseWrapper作为坦白说,我不明白的说法,我本来期望它采取表列(即房产).

我有什么想法可以做到这一点?

sql sqlite android android-sqlite dbflow

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

不调用SQLiteOpenHelper onCreate方法

即使在卸载应用程序然后重新安装它之后,也不会调用onCreate方法.

Database.java:

public class Database extends SQLiteOpenHelper {
    public static SQLiteDatabase db;
    public Database(Context context) {
        super(context,"db", null, 1);
        Log.i("DB", "dbManager");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i("DB", "dbOnCreate");
        String s = "CREATE TABLE test(id INTEGER);";
        db.execSQL(s);
    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        Log.i("DB", "dbOnUpgrade");
    }
}
Run Code Online (Sandbox Code Playgroud)

我这叫:

Database db = new Database(this);
Run Code Online (Sandbox Code Playgroud)

输出:

07-17 12:42:03.053 16448-16448/com.package.app I/DB:dbManager

这个问题是什么以及如何解决?

sqlite android android-sqlite

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

发布Android应用后,如何向SQLite数据库添加新列?

我想向SQLite数据库中添加新列,但是我已经在Play商店中发布了我的应用程序,因此,如果我对其进行编辑,则用户需要卸载并重新安装该应用程序,但我不希望这样做。请帮忙,我是Android新手。

android google-play android-sqlite

2
推荐指数
2
解决办法
370
查看次数