Android数据库应用程序冻结,然后在设备上运行时崩溃

Android数据库应用程序冻结,然后在设备上运行时崩溃,android,sqlite,Android,Sqlite,这是一个简单的数据库应用程序,它在表中存储某些内容(单击按钮)并删除(单击按钮)。在设备上安装应用程序(棒棒糖)时,会弹出主活动,但只要我在文本字段中输入一些文本并单击按钮将其保存到数据库,应用程序就会冻结,并在一段时间后强制关闭。此外,如果我再次尝试运行应用程序,则主活动不会启动,应用程序强制关闭 这是主要的活动, import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.

这是一个简单的数据库应用程序,它在表中存储某些内容(单击按钮)并删除(单击按钮)。在设备上安装应用程序(棒棒糖)时,会弹出主活动,但只要我在文本字段中输入一些文本并单击按钮将其保存到数据库,应用程序就会冻结,并在一段时间后强制关闭。此外,如果我再次尝试运行应用程序,则主活动不会启动,应用程序强制关闭

这是主要的活动,

import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;



public class MainActivity extends ActionBarActivity {

    EditText myinput;
    TextView mytext;
    MyDBHandler dbhandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        myinput =(EditText) findViewById(R.id.myinput);
        mytext =(TextView) findViewById(R.id.mytext);
        dbhandler= new MyDBHandler(this, null, null, 1);
        printDatabase();
    }

    //add product to database

    public void addstuff(View view)
    {
        products product = new products(myinput.getText().toString());
        dbhandler.addProduct(product);
        printDatabase();

    }

    //delete items from database

    public void deletestuff(View view)
    {
        String inputtext= myinput.getText().toString();
        dbhandler.deleteProduct(inputtext);
        printDatabase();


    }

    public void printDatabase()
    {
        String dbString= dbhandler.databaseToString();
        mytext.setText(dbString);
        myinput.setText("");
    }

}
这是数据库处理程序类

import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.database.Cursor;
import android.content.Context;
import android.content.ContentValues;


public class MyDBHandler extends SQLiteOpenHelper{

    private static final int DATABASE_VERSION = 1;
    private static final String DATABASE_NAME = "products.db";
    public static final String TABLE_PRODUCTS = "products";
    public static final String COLUMN_ID ="_id";
    public static final String COLUMN_PRODUCTNAME ="productname";


    public MyDBHandler(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
        super(context, DATABASE_NAME, factory, DATABASE_VERSION);
    }


    @Override
    public void onCreate(SQLiteDatabase db) {

        String query= "CREATE TABLE " + TABLE_PRODUCTS + "(" +
                COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT , " +
                COLUMN_PRODUCTNAME + " TEXT " +
                ");";
        db.execSQL(query);

    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS "+TABLE_PRODUCTS);
        onCreate(db);
    }

    //add a new row to the database
    public void addProduct(products product)
    {
        ContentValues values = new ContentValues();
        values.put(COLUMN_PRODUCTNAME, product.get_productname());
        SQLiteDatabase db= getWritableDatabase();
        db.insert(TABLE_PRODUCTS, null, values);
        db.close();
    }

    //delete product from the database
    public void deleteProduct(String productname)
    {
        SQLiteDatabase db= getWritableDatabase();
        db.execSQL("DELETE FROM "+ TABLE_PRODUCTS + " WHERE " + COLUMN_PRODUCTNAME + " =\"" + productname + "\";" );
    }

    //printing out the database as a string

    public String databaseToString()
    {
        String dbString ="";
        SQLiteDatabase db= getWritableDatabase();
        String query = "SELECT * FROM "+ TABLE_PRODUCTS + " WHERE 1";

        //CURSOR POINTS TO A LOCATION IN THE DATABASE RESULTS
        Cursor c= db.rawQuery(query,null);
        //go to 1st row in your results
        c.moveToFirst();

        while(!c.isAfterLast())
        {
            if(c.getString(c.getColumnIndex("productname"))!=null)
            {
                dbString += c.getString(c.getColumnIndex("productname"));
                dbString += "\n";

            }

        }
        db.close();
        return dbString;

    }



}
这是我用来设置和获取名称的products类

public class products {

    private int _id;
    private String _productname;

    public products()
    {

    }

    public products(String productname) {
        this._productname = productname;
    }

    public void set_id(int _id) {
        this._id = _id;
    }

    public void set_productname(String _productname) {
        this._productname = _productname;
    }

    public int get_id() {
        return _id;
    }

    public String get_productname() {
        return _productname;
    }
}
应用程序冻结在这里

  08-19 00:46:24.567  24251-24251/com.example.vashisht.sqliteapp I/art﹕ Late-enabling -Xcheck:jni
08-19 00:46:24.567  24251-24251/com.example.vashisht.sqliteapp I/art﹕ VMHOOK: rlim_cur : 0 pid:24251
08-19 00:46:24.887  24251-24251/com.example.vashisht.sqliteapp D/Atlas﹕ Validating map...
08-19 00:46:24.937  24251-24300/com.example.vashisht.sqliteapp I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: TEST SBA LA.BF.1.1.1_RB1 AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.012 + c1105519 + c_apilogging ()
    OpenGL ES Shader Compiler Version: E031.25.03.00
    Build Date: 01/23/15 Fri
    Local Branch:
    Remote Branch: refs/tags/AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.012
    Local Patches: NONE
    Reconstruct Branch: NOTHING
08-19 00:46:25.077  24251-24251/com.example.vashisht.sqliteapp I/InputMethodManager﹕ [startInputInner] EditorInfo { packageName=com.example.vashisht.sqliteapp, inputType=0x20001, imeOptions=0x40000006, privateImeOptions=null }, windowGainingFocus=android.view.ViewRootImpl$W@1287b4e7, mServedView=android.support.v7.widget.AppCompatEditText{e909894 VFED..CL .F....I. 90,222-990,335 #7f0c004f app:id/myinput}, mServedInputConnectionWrapper=android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper@18863f3d
08-19 00:46:31.627  24251-24261/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 7.228ms
08-19 00:46:34.287  24251-24266/com.example.vashisht.sqliteapp I/art﹕ Background sticky concurrent mark sweep GC freed 143(4KB) AllocSpace objects, 84(4MB) LOS objects, 8% free, 5MB/5MB, paused 5.643ms total 24.844ms
08-19 00:46:34.987  24251-24265/com.example.vashisht.sqliteapp I/art﹕ WaitForGcToComplete blocked for 9.670ms for cause HeapTrim
08-19 00:46:36.647  24251-24261/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 5.596ms
我想应用程序代码不会引发异常

还有一些gradle同步问题,我应该在这里做什么

Warning:The project encoding (windows-1252) does not match the encoding specified in the Gradle build files (UTF-8).
This can lead to serious bugs.
<a href="http://tools.android.com/knownissues/encoding">More Info...</a><br><a href="open.encodings.settings">Open File Encoding Settings</a>
警告:项目编码(windows-1252)与Gradle生成文件(UTF-8)中指定的编码不匹配。
这可能导致严重的错误。

我应该更改项目编码还是gradle构建文件?? 我该如何纠正这一点

logcat堆栈跟踪

08-19 01:11:27.257    5372-5384/? E/AndroidHttpClient﹕ Leak found
    java.lang.IllegalStateException: AndroidHttpClient created and never closed
            at com.google.android.volley.AndroidHttpClient.<init>(AndroidHttpClient.java:202)
            at com.google.android.volley.AndroidHttpClient.newInstance(AndroidHttpClient.java:170)
            at com.google.android.volley.GoogleHttpClient.<init>(GoogleHttpClient.java:146)
            at com.google.android.volley.GoogleHttpClient.<init>(GoogleHttpClient.java:113)
            at com.google.android.finsky.FinskyApp.onCreate(FinskyApp.java:366)
            at android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
            at android.app.ActivityThread.handleBindApplication(ActivityThread.java:4947)
            at android.app.ActivityThread.access$1500(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1424)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:155)
            at android.app.ActivityThread.main(ActivityThread.java:5696)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
08-19 01:11:27.2575372-5384/?E/AndroidHttpClient﹕ 发现漏洞
java.lang.IllegalStateException:AndroidHttpClient已创建且从未关闭
位于com.google.android.volley.AndroidHttpClient.(AndroidHttpClient.java:202)
位于com.google.android.volley.AndroidHttpClient.newInstance(AndroidHttpClient.java:170)
位于com.google.android.volley.GoogleHttpClient。(GoogleHttpClient.java:146)
位于com.google.android.volley.GoogleHttpClient。(GoogleHttpClient.java:113)
位于com.google.android.finsky.FinskyApp.onCreate(FinskyApp.java:366)
位于android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1024)
位于android.app.ActivityThread.handleBindApplication(ActivityThread.java:4947)
在android.app.ActivityThread.access,售价1500美元(ActivityThread.java:144)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1424)
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:155)
位于android.app.ActivityThread.main(ActivityThread.java:5696)
位于java.lang.reflect.Method.invoke(本机方法)
位于java.lang.reflect.Method.invoke(Method.java:372)
在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run上(ZygoteInit.java:1029)
位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
当我点击按钮向数据库添加内容时,就是这样

08-19 01:30:25.477  17029-17029/? I/art﹕ Late-enabling -Xcheck:jni
08-19 01:30:25.477  17029-17029/? I/art﹕ VMHOOK: rlim_cur : 0 pid:17029
08-19 01:30:25.517  17029-17039/? I/art﹕ Debugger is no longer active
08-19 01:30:25.687  17029-17029/? D/Atlas﹕ Validating map...
08-19 01:30:25.737  17029-17048/? I/Adreno-EGL﹕ <qeglDrvAPI_eglInitialize:410>: EGL 1.4 QUALCOMM build: TEST SBA LA.BF.1.1.1_RB1 AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.012 + c1105519 + c_apilogging ()
    OpenGL ES Shader Compiler Version: E031.25.03.00
    Build Date: 01/23/15 Fri
    Local Branch:
    Remote Branch: refs/tags/AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.012
    Local Patches: NONE
    Reconstruct Branch: NOTHING
08-19 01:30:25.857  17029-17029/? I/InputMethodManager﹕ [startInputInner] EditorInfo { packageName=com.example.vashisht.sqliteapp, inputType=0x20001, imeOptions=0x40000006, privateImeOptions=null }, windowGainingFocus=android.view.ViewRootImpl$W@1287b4e7, mServedView=android.support.v7.widget.AppCompatEditText{e909894 VFED..CL .F....I. 90,222-990,335 #7f0c004f app:id/myinput}, mServedInputConnectionWrapper=android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper@18863f3d
08-19 01:30:36.817  17029-17039/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 5.739ms
08-19 01:30:41.217  17029-17044/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 9.796ms
08-19 01:30:42.817  17029-17039/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 6.697ms
08-19 01:30:44.907  17029-17044/com.example.vashisht.sqliteapp I/art﹕ Background partial concurrent mark sweep GC freed 98(3KB) AllocSpace objects, 58(6MB) LOS objects, 44% free, 4MB/8MB, paused 9.494ms total 18.435ms
08-19 01:30:46.327  17029-17039/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 6.438ms
08-19 01:30:47.017  17029-17044/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 6.799ms
08-19 01:30:47.967  17029-17044/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 9.295ms
08-19 01:30:47.967  17029-17044/com.example.vashisht.sqliteapp I/art﹕ Background partial concurrent mark sweep GC freed 80(2768B) AllocSpace objects, 46(5MB) LOS objects, 54% free, 3MB/7MB, paused 10.332ms total 23.127ms
08-19 01:30:51.697  17029-17044/com.example.vashisht.sqliteapp I/art﹕ Background partial concurrent mark sweep GC freed 72(2496B) AllocSpace objects, 42(6MB) LOS objects, 68% free, 1847KB/5MB, paused 7.996ms total 21.588ms
08-19 01:30:57.847  17029-17039/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 5.385ms
08-19 01:31:03.587  17029-17044/com.example.vashisht.sqliteapp W/art﹕ Suspending all threads took: 8.907ms
08-19 01:30:25.477 17029-17029/?I/艺术﹕ 延迟启用-Xcheck:jni
08-19 01:30:25.477  17029-17029/? I/艺术﹕ VMHOOK:rlim_cur:0 pid:17029
08-19 01:30:25.517  17029-17039/? I/艺术﹕ 调试器不再处于活动状态
08-19 01:30:25.687  17029-17029/? D/阿特拉斯﹕ 正在验证映射。。。
08-19 01:30:25.737  17029-17048/? I/Adreno EGL﹕ : EGL 1.4高通公司构建:测试SBA LA.BF.1.1_RB1 AU_LINUX_ANDROID_LA.BF.1.1.1_RB1.05.00.02.042.012+c1105519+c_Apiloging()
OpenGL ES着色器编译器版本:E031.25.03.00
建造日期:2015年1月23日星期五
本地分行:
远程分支:refs/tags/AU_LINUX_ANDROID_LA.BF.1.1_RB1.05.00.02.042.012
本地修补程序:无
重建分支:没有
08-19 01:30:25.857  17029-17029/? I/InputMethodManager﹕ [startInputInner]EditorInfo{packageName=com.example.vashisht.sqliteapp,inputType=0x20001,imeOptions=0x40000006,privateImeOptions=null},windowGainingFocus=android.view.ViewRootImpl$W@1287b4e7,mServedView=android.support.v7.widget.AppCompatiEditText{e909894 VFED..CL.F..I.90222-990335#7f0c004f app:id/myinput},mServedInputConnectionWrapper=android.view.inputmethod.InputMethodManager$ControlledInputConnectionWrapper@18863f3d
08-19 01:30:36.817 17029-17039/com.example.vashisht.sqliteapp W/art﹕ 暂停所有线程所需时间:5.739ms
08-19 01:30:41.217 17029-17044/com.example.vashisht.sqliteapp W/art﹕ 暂停所有线程所需时间:9.796ms
08-19 01:30:42.817 17029-17039/com.example.vashisht.sqliteapp W/art﹕ 暂停所有线程所需时间:6.697ms
08-19 01:30:44.907 17029-17044/com.example.vashisht.sqliteapp I/art﹕ 背景部分并发标记扫描GC释放98(3KB)AllocSpace对象,58(6MB)LOS对象,44%空闲,4MB/8MB,暂停9.494ms总计18.435ms
08-19 01:30:46.327 17029-17039/com.example.vashisht.sqliteapp W/art﹕ 暂停所有线程所需时间:6.438ms
08-19 01:30:47.017 17029-17044/com.example.vashisht.sqliteapp W/art﹕ 暂停所有线程所需时间:6.799ms
08-19 01:30:47.967 17029-17044/com.example.vashisht.sqliteapp W/art﹕ 挂起所有线程的时间:9.295ms
08-19 01:30:47.967 17029-17044/com.example.vashisht.sqliteapp I/art﹕ 背景部分并发标记扫描GC释放了80(2768B)个AllocSpace对象,46(5MB)个LOS对象,54%空闲,3MB/7MB,暂停10.332ms总计23.127ms
08-19 01:30:51.697 17029-17044/com.example.vashisht.sqliteapp I/art﹕ 背景部分并发标记扫描GC释放72(2496B)个AllocSpace对象,42(6MB)个LOS对象,68%空闲,1847KB/5MB,暂停7.996ms总计21.588ms
08-19 01:30:57.847 17029-17039/com.example.vashisht.sqliteapp W/art﹕ 暂停所有线程所需时间:5.385ms
08-19 01:31:03.587 17029-17044/com.example.vashisht.sqliteapp W/art﹕ 暂停所有线程所需时间:8.907ms

logcat显示这些挂起的线程消息,应用程序保持冻结状态,然后我必须杀死应用程序

是否缺少SQLLite游标工厂

在上面的活动onCreate中执行此操作:

private SQLiteDatabase.CursorFactory cursorFactory = new SQLiteDatabase.CursorFactory() {

            @Override
            public Cursor newCursor(SQLiteDatabase db, SQLiteCursorDriver masterQuery, String editTable, SQLiteQuery query) {
                // TODO handle cursor creation from passed in query
                return null;
            }
        };
然后修改数据库创建,如下所示:

dbhandler= new MyDBHandler(this, null, cursorFactory, 1);
while循环中缺少
moveToNext()
方法调用:

while(!c.isAfterLast()) {

    if (c.getString(c.getColumnIndex("productname")) != null) {

            dbString += c.getString(c.getColumnIndex("productname"));
            dbString += "\n";
    }

    c.moveToNext();
}

啊,对不起,应该意识到这是不同的。Logcat的致命之处是什么?“如果存在,则放弃故事”。。。输入错误我纠正了drop table的输入错误,但仍然是sameadd Logcat堆栈trace@DroidChris添加了日志跟踪这没有帮助,您知道如何调用getWritableDatabase()吗
while(!c.isAfterLast()) {

    if (c.getString(c.getColumnIndex("productname")) != null) {

            dbString += c.getString(c.getColumnIndex("productname"));
            dbString += "\n";
    }

    c.moveToNext();
}