2017-06-17 16 views
-1

単純なリストアアプリケーションを作成しようとしていますが、列内のすべての値を削除しようとすると、アプリケーションがクラッシュします。SQLiteから値を削除するとAndroidスタジオがクラッシュする

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
app:layout_behavior="@string/appbar_scrolling_view_behavior" 
tools:context="com.berserker.shoppinglist.MainActivity"> 

<ListView 
    android:id="@+id/listing" 
    android:layout_width="match_parent" 
    android:layout_height="430dp" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    tools:layout_editor_absoluteX="8dp" 
    tools:layout_editor_absoluteY="8dp" /> 

<Button 
    android:id="@+id/Add" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New" 
    tools:layout_editor_absoluteX="16dp" 
    tools:layout_editor_absoluteY="447dp" 
    android:layout_marginBottom="17dp" 
    android:onClick="addNewList" 
    android:layout_marginLeft="104dp" 
    android:layout_marginStart="104dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<Button 
    android:id="@+id/clear" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignBottom="@+id/Add" 
    android:layout_toEndOf="@+id/Add" 
    android:layout_toRightOf="@+id/Add" 
    android:text="Clear All" 
    android:onClick="clear" 
    /> 

そして、これは私のコードです::次のように私のXMLはある

public class MainActivity extends AppCompatActivity { 

public ListView lv; 
ArrayAdapter<String> adapters; 
ArrayList<String> titles = new ArrayList<String>(); 
String[] split; 
File path = Environment.getDataDirectory(); 
SQLiteDatabase titleDB; 
Cursor resultTitles; 

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

    titleDB = openOrCreateDatabase("titles", MODE_APPEND, null); 
    titleDB.execSQL("CREATE TABLE IF NOT EXISTS Titles(title VARCHAR);"); 
    resultTitles = titleDB.rawQuery("Select * from Titles",null); 
    resultTitles.moveToFirst(); 
    String title = ""; 
    long count = DatabaseUtils.longForQuery(titleDB, "SELECT COUNT(*) FROM titles", null); 
    while (resultTitles.moveToNext()) { 
      title = resultTitles.getString(resultTitles.getColumnIndex("title")); 
      titles.add(title); 
    } 
    titles.add("" + (int) count); 
    titleDB.close(); 

    //Adapter for the ListView 
    adapters = new ArrayAdapter<String>(this, R.layout.simplerow, titles); 
    // Add Adapter to List 
    lv = (ListView) findViewById(R.id.listing); 
    lv.setAdapter(adapters); 

} 

public void clear(View v) { 
    titleDB.delete("title",null,null); 
    titleDB.execSQL("CREATE TABLE IF NOT EXISTS Titles(title VARCHAR);"); 

} 


public void addNewList(View v) { 
    Intent intent2 = new Intent(this, addItem.class); 
    startActivity(intent2); 
} 
} 

私はonclickのクリア()関数にリンクするすべてクリアボタンを押すと、それがクラッシュします即座に。テーブルタイトルの列にある現在のデータをすべて削除しますが、列タイトルはそのまま残しておきます。どんなアイデアがクラッシュするのか?

これは私のLogCatです:

06-17 10:39:49.926 32150-32150/? I/art: Not late-enabling -Xcheck:jni (already on) 
06-17 10:39:49.926 32150-32150/? W/art: Unexpected CPU variant for X86 using defaults: x86 
06-17 10:39:49.963 32150-32157/? E/art: Failed sending reply to debugger: Broken pipe 
06-17 10:39:49.963 32150-32157/? I/art: Debugger is no longer active 
06-17 10:39:49.963 32150-32157/? I/art: Starting a blocking GC Instrumentation 
06-17 10:39:50.126 32150-32150/? W/System: ClassLoader referenced unknown path: /data/app/com.berserker.shoppinglist-1/lib/x86 
06-17 10:39:50.137 32150-32150/? I/InstantRun: starting instant run server: is main process 
06-17 10:39:50.267 32150-32150/? W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable 
06-17 10:39:50.470 32150-32166/? I/OpenGLRenderer: Initialized EGL, version 1.4 
06-17 10:39:50.470 32150-32166/? D/OpenGLRenderer: Swap behavior 1 
06-17 10:39:50.470 32150-32166/? W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without... 
06-17 10:39:50.470 32150-32166/? D/OpenGLRenderer: Swap behavior 0 
06-17 10:39:50.492 32150-32166/? D/EGL_emulation: eglCreateContext: 0xa735ebc0: maj 2 min 0 rcv 2 
06-17 10:39:50.519 32150-32166/? D/EGL_emulation: eglMakeCurrent: 0xa735ebc0: ver 2 0 (tinfo 0xa907b710) 
06-17 10:39:50.569 32150-32166/? D/EGL_emulation: eglMakeCurrent: 0xa735ebc0: ver 2 0 (tinfo 0xa907b710) 
06-17 10:39:52.069 32150-32150/com.berserker.shoppinglist D/AndroidRuntime: Shutting down VM 
06-17 10:39:52.072 32150-32150/com.berserker.shoppinglist E/AndroidRuntime: FATAL EXCEPTION: main 
                      Process: com.berserker.shoppinglist, PID: 32150 
                      java.lang.IllegalStateException: Could not execute method for android:onClick 
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
                       at android.view.View.performClick(View.java:5610) 
                       at android.view.View$PerformClick.run(View.java:22265) 
                       at android.os.Handler.handleCallback(Handler.java:751) 
                       at android.os.Handler.dispatchMessage(Handler.java:95) 
                       at android.os.Looper.loop(Looper.java:154) 
                       at android.app.ActivityThread.main(ActivityThread.java:6077) 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866) 
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756) 
                      Caused by: java.lang.reflect.InvocationTargetException 
                       at java.lang.reflect.Method.invoke(Native Method) 
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
                       at android.view.View.performClick(View.java:5610)  
                       at android.view.View$PerformClick.run(View.java:22265)  
                       at android.os.Handler.handleCallback(Handler.java:751)  
                       at android.os.Handler.dispatchMessage(Handler.java:95)  
                       at android.os.Looper.loop(Looper.java:154)  
                       at android.app.ActivityThread.main(ActivityThread.java:6077)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)  
                      Caused by: java.lang.IllegalStateException: attempt to re-open an already-closed object: SQLiteDatabase: /data/user/0/com.berserker.shoppinglist/databases/titles 
                       at android.database.sqlite.SQLiteClosable.acquireReference(SQLiteClosable.java:55) 
                       at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1662) 
                       at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1608) 
                       at com.berserker.shoppinglist.MainActivity.clear(MainActivity.java:75) 
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)  
                       at android.view.View.performClick(View.java:5610)  
                       at android.view.View$PerformClick.run(View.java:22265)  
                       at android.os.Handler.handleCallback(Handler.java:751)  
                       at android.os.Handler.dispatchMessage(Handler.java:95)  
                       at android.os.Looper.loop(Looper.java:154)  
                       at android.app.ActivityThread.main(ActivityThread.java:6077)  
                       at java.lang.reflect.Method.invoke(Native Method)  
                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)  
                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:756)  
06-17 10:42:18.481 32150-32157/com.berserker.shoppinglist W/art: Suspending all threads took: 20.975ms 
+0

を試してみて、私はクラッシュログを取得するにはどうすればよいクラッシュログ – Raghunandan

+0

を投稿?続いてアンドロイドスタジオの一番下にある緑のアンドロイドアイコンを –

+0

クリック –

答えて

0

チェックアンドロイド:onClickのこのようなXMLとJavaコードで、再試行してください。株式・エラーのために

public void onClickClear(View v) { 
    titleDB.delete("title",null,null); 
    titleDB.execSQL("CREATE TABLE IF NOT EXISTS Titles(title VARCHAR);"); 

} 
​​

enter image description here

+0

それでもクラッシュします:/ –

+0

あなたのlogcatを共有してください。 –

+0

上記のLogCatを掲載しました –

0

問題.Here mOpenHelperを解決するために、このコードを試してみてください、あなたがこのようなあなたのonCreate()メソッドで初期化されることができるDatabaseHelperです:

onCreate()

DatabaseHelper mOpenHelper = new DatabaseHelper(this);あなたはjava2s.com

1
public class MainActivity extends AppCompatActivity { 

public ListView lv; 
ArrayAdapter<String> adapters; 
ArrayList<String> titles = new ArrayList<String>(); 
String[] split; 
File path = Environment.getDataDirectory(); 
SQLiteDatabase titleDB; 
Cursor resultTitles; 

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

    titleDB = openOrCreateDatabase("titles", MODE_APPEND, null); 
    titleDB.execSQL("CREATE TABLE IF NOT EXISTS Titles(title VARCHAR);"); 
    resultTitles = titleDB.rawQuery("Select * from Titles",null); 
    resultTitles.moveToFirst(); 
    String title = ""; 
    long count = DatabaseUtils.longForQuery(titleDB, "SELECT COUNT(*) FROM titles", null); 
    while (resultTitles.moveToNext()) { 
      title = resultTitles.getString(resultTitles.getColumnIndex("title")); 
      titles.add(title); 
    } 
    titles.add("" + (int) count); 
    titleDB.close(); 

    //Adapter for the ListView 
    adapters = new ArrayAdapter<String>(this, R.layout.simplerow, titles); 
    // Add Adapter to List 
    lv = (ListView) findViewById(R.id.listing); 
    lv.setAdapter(adapters); 

} 

    public void clear(View v) { 
    titleDB = openOrCreateDatabase("titles", MODE_APPEND, null); 
    titleDB.delete("title",null,null); 
    titleDB.execSQL("CREATE TABLE IF NOT EXISTS Titles(title VARCHAR);"); 

    } 


    public void addNewList(View v) { 
    Intent intent2 = new Intent(this, addItem.class); 
    startActivity(intent2); 
    } 
} 

を経ることがより多くのアイデアを取得するための

private void clear(View v) { 
    try { 
     SQLiteDatabase db = mOpenHelper.getWritableDatabase(); 
     db.delete(TABLE_NAME, " title", null); 
    } catch (SQLException e) { 

    } 

この

関連する問題