GVKun编程网logo

android – SQLite:库程序不按顺序调用 – 如何解决这个崩溃问题?

19

如果您对android–SQLite:库程序不按顺序调用–如何解决这个崩溃问题?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于android–SQLite:库程序不按顺序调

如果您对android – SQLite:库程序不按顺序调用 – 如何解决这个崩溃问题?感兴趣,那么本文将是一篇不错的选择,我们将为您详在本文中,您将会了解到关于android – SQLite:库程序不按顺序调用 – 如何解决这个崩溃问题?的详细内容,并且为您提供关于Android Debug App崩溃问题、Android Material Design Ripple Effect 在 Android5.0(SDK=21)以下 Android 版本崩溃问题解决、android sqlite:如何存储和检索嵌套记录?、Android Sqlite:检查表中是否存在行的有价值信息。

本文目录一览:

android – SQLite:库程序不按顺序调用 – 如何解决这个崩溃问题?

android – SQLite:库程序不按顺序调用 – 如何解决这个崩溃问题?

好的,所以我的应用程序完全适用于 Android 2.3并且在4.0.4上崩溃.

我解析XML并将数据保存到我的sqlite数据库.

这不是每次都会发生,而是经常发生,有时在按钮点击时有时会出现在新的Activity创业公司……等等

崩溃异常:

11-16 15:16:41.231: E/sqliteQuery(6398): exception: library routine called out of sequence; query: SELECT _id,name,tipus,azonosito,gpsx,gpsy,pictures,telefonok,webcim,email,nyitvatartas,cim,orszag,befogadokepesseg,szolgaltatasok,arkategoria,leiras,ertekeles,pontszam,facebook,keywords,rating FROM shops_top20

11-16 15:16:41.241: E/AndroidRuntime(6398): FATAL EXCEPTION: main
11-16 15:16:41.241: E/AndroidRuntime(6398): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.KeySoft.OpenGuide/com.KeySoft.OpenGuide.Activities.Top20}: android.database.sqlite.sqliteMisuseException: library routine called out of sequence
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1968)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.os.Looper.loop(Looper.java:137)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.ActivityThread.main(ActivityThread.java:4507)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at java.lang.reflect.Method.invokeNative(Native Method)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at java.lang.reflect.Method.invoke(Method.java:511)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at dalvik.system.NativeStart.main(Native Method)
11-16 15:16:41.241: E/AndroidRuntime(6398): Caused by: android.database.sqlite.sqliteMisuseException: library routine called out of sequence
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.database.sqlite.sqliteQuery.nativeFillWindow(Native Method)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.database.sqlite.sqliteQuery.fillWindow(sqliteQuery.java:86)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.database.sqlite.sqliteCursor.fillWindow(sqliteCursor.java:164)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.database.sqlite.sqliteCursor.getCount(sqliteCursor.java:156)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.database.AbstractCursor.movetoPosition(AbstractCursor.java:161)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.database.AbstractCursor.movetoFirst(AbstractCursor.java:201)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at com.KeySoft.OpenGuide.Activities.Top20.sqlShopsVissza(Top20.java:546)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at com.KeySoft.OpenGuide.Activities.Top20.listakKirajzolaSAEsValtas(Top20.java:165)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at com.KeySoft.OpenGuide.Activities.Top20.onCreate(Top20.java:113)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.Activity.performCreate(Activity.java:4469)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
11-16 15:16:41.241: E/AndroidRuntime(6398):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1932)

E D I T:
好吧,所以我在关闭我的应用程序中的所有数据库连接之前关闭了所有游标,现在我得到了这个结果:

11-16 20:00:28.409: E/AndroidRuntime(7548): FATAL EXCEPTION: main
11-16 20:00:28.409: E/AndroidRuntime(7548): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.KeySoft.OpenGuide/com.KeySoft.OpenGuide.Activities.Top20}: java.util.ConcurrentModificationException
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1968)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1993)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.ActivityThread.access$600(ActivityThread.java:127)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1159)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.os.Looper.loop(Looper.java:137)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.ActivityThread.main(ActivityThread.java:4507)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at java.lang.reflect.Method.invokeNative(Native Method)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at java.lang.reflect.Method.invoke(Method.java:511)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at dalvik.system.NativeStart.main(Native Method)
11-16 20:00:28.409: E/AndroidRuntime(7548): Caused by: java.util.ConcurrentModificationException
11-16 20:00:28.409: E/AndroidRuntime(7548):     at java.util.WeakHashMap$HashIterator.next(WeakHashMap.java:165)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.database.sqlite.sqliteDatabase.closeClosable(sqliteDatabase.java:1250)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.database.sqlite.sqliteDatabase.close(sqliteDatabase.java:1220)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.database.sqlite.sqliteOpenHelper.close(sqliteOpenHelper.java:265)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at com.KeySoft.OpenGuide.DB_Adapter.close(DB_Adapter.java:273)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at com.KeySoft.OpenGuide.Activities.Top20.sqlShopsVissza(Top20.java:558)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at com.KeySoft.OpenGuide.Activities.Top20.listakKirajzolaSAEsValtas(Top20.java:165)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at com.KeySoft.OpenGuide.Activities.Top20.onCreate(Top20.java:113)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.Activity.performCreate(Activity.java:4469)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1052)
11-16 20:00:28.409: E/AndroidRuntime(7548):     at android.app.ActivityThread.performlaunchActivity(ActivityThread.java:1932)

我的代码中有问题的部分是我的Top20 Activity中的一个函数,它当前是以下函数:

protected void getShopsFromsql(String whichTable){


            db.open();
            Cursor c;

            if(whichTable.equals("Top20")){
                c = db.getAllTop20Titles();
            }
            else if (whichTable.equals("Latest10")){
                c = db.getAllLatest10Titles();
            }
            else{
                c = db.getAllShopsFullTitles();
            }

                if (c.movetoFirst())  {
                    do  {

                        addShopToList(c.getString(1),c.getString(2),c.getString(4),c.getString(5),c.getString(12),c.getString(11),c.getString(3));
                    }while (c.movetoNext());
                }

                c.close(); 
                db.close(); //App Crashes here... why?
        }

db肯定是我的数据库,我用Google搜索了这个错误,当然,当我想在一个线程上编辑一个值并通过另一个线程迭代相同的值(这次是背景AsyncTask)时,它会发生,但我有一个单例数据库适配器我在这里读到这种数据库实现最适合Android应用程序.

我有一个带有单个数据库的扩展Application类,我每次都调用这个数据库.

public class MyApp extends Application {

 private static DB_Adapter globalDatabase;


    @Override
    public void onCreate() {
        super.onCreate();

        globalDatabase = new DB_Adapter(this);
    }

    public static DB_Adapter getDB() {

        return globalDatabase;
    }

}

在我的应用程序中引用数据库,如下所示:

public class Top20 extends Activity 
{


    private DB_Adapter db;
    private MyApp myApp;

    @Override
    public void onCreate(Bundle savedInstanceState){



        super.onCreate(savedInstanceState);
        setContentView(R.layout.top20);


        myApp = (MyApp) getApplication();

        db = myApp.getDB();

                    //...........morecode...etc..

所以:

我的问题是:

为什么会出现此错误?
我在做这个单例数据库实现吗?

谢谢你的建议,
亚当

解决方法

您似乎获得了ConcurrentModificationException,因为您尝试关闭数据库,因为其他一些线程正在尝试访问它.在没有看到你的其余代码的情况下,我不确定你有什么其他线程访问数据库,所以很难分辨出还有什么.

另外,也许是一个更好的解决方案,你有没有理由关闭它?正如Google FW工程师Dianne Hackborn所说,您不需要关闭数据库,因为一旦您的进程被终止,它将自动关闭.有关此问题的多篇帖子,请参阅link #1和link #2.

Android Debug App崩溃问题

Android Debug App崩溃问题

在Edit Configurations中检查一下是否选择了Auto这样默认会调试NDK的代码,如果NDK调试没有配置就可能导致崩溃,选择Java就不崩溃了

Android Material Design Ripple Effect 在 Android5.0(SDK=21)以下 Android 版本崩溃问题解决

Android Material Design Ripple Effect 在 Android5.0(SDK=21)以下 Android 版本崩溃问题解决

Android Material Design Ripple Effect 在 Android5.0(SDK=21)以下 Android 版本崩溃问题解决

附录 1 的 Android Ripple Effect 水波波纹荡漾的视觉交互设计,在 Android SDK 版本 21 上运作良好,但是放到 21 版本以下,比如 Android 4.0.3(SDK=15),就会导致整个 APP 崩溃,其中一个解决方案:以附录文章 1 为例,不仅需要在 drawable-v21 中写好 ripple_effect.xml,同时需要再在普通的 res/drawable 下面放一个同名 ripple_effect.xml 文件,在 res/drawable 目录下放的 ripple_effect.xml,目的就是为了向下兼容到低版本的 Android 设备,但是在 Android 低版本设备中,我把 ripple effect 退化成一个简单的点击背景变灰色的交互设计:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:drawable="@android:color/white" android:state_window_focused="false" />
<item android:drawable="@android:color/darker_gray" android:state_pressed="true" />
<item android:drawable="@android:color/darker_gray" android:state_focused="true" />
<item android:drawable="@android:color/transparent" />

</selector>

这样就可以正常兼容低版本的 Android 设备了,但这个解决方案的遗憾就是只是解决了代码向下兼容到低版本 Android 设备的问题,代价是牺牲了 Android Material Design 的 Ripple Effect 水波波纹荡漾视觉交互设计效果。


附录:
1,《Android Material Design : Ripple Effect 水波波纹荡漾的视觉交互设计》链接:http://blog.csdn.net/zhangphil/article/details/52451848



android sqlite:如何存储和检索嵌套记录?

android sqlite:如何存储和检索嵌套记录?

取决于您如何设置sqlite数据库。

如果获取学生的数据,则可以使用光标进行查询,并在这种情况下找到第一个条目john或要搜索的值。然后获得标记部分。

然后我假设这是一个嵌套表,因此请再次执行相同的操作并按主题进行查询,例如英语。

Android Sqlite:检查表中是否存在行

Android Sqlite:检查表中是否存在行

我有一个字符串数组,在插入它们之前需要检查表中是否存在这些字符串,以避免重复。什么是SQL查询,如何替换以下值?:)

ArrayList<Product> NewProducts= new ArrayList<Product>();

我的产品型号:

public class Product {    public Product()    {    }    public String PID = "pid";    public String getPID() {        return PID;    }    public void setPID(String pID) {        PID = pID;    }    public String getNAME() {        return NAME;    }    public void setNAME(String nAME) {        NAME = nAME;    }    public String PID = "pid";    public String NAME = "name";}

表格名称: product_pics

数据库名称: product_db

我了解此声明将起作用:

"SELECT * FROM '' + product_pics + '' WHERE PID='' + pid +''"

如何正确格式化此格式,以使该方法在产品存在或不存在时返回?

答案1

小编典典

只是喜欢

 Cursor cursor = null; String sql ="SELECT PID FROM "+TableName+" WHERE PID="+pidValue;  cursor= db.rawQuery(sql,null); Log("Cursor Count : " + cursor.getCount()); if(cursor.getCount()>0){  //PID Found }else{ //PID Not Found  } cursor.close();

关于android – SQLite:库程序不按顺序调用 – 如何解决这个崩溃问题?的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于Android Debug App崩溃问题、Android Material Design Ripple Effect 在 Android5.0(SDK=21)以下 Android 版本崩溃问题解决、android sqlite:如何存储和检索嵌套记录?、Android Sqlite:检查表中是否存在行的相关信息,请在本站寻找。

本文标签: