0

データベースを作成し、そのデータベースでいくつかの CRUD 操作を実行しようとしています。どういうわけか、挿入して選択しようとすると、次のエラーが発生します。

07-19 08:26:21.880: E/AndroidRuntime(2740): FATAL EXCEPTION: main
07-19 08:26:21.880: E/AndroidRuntime(2740): java.lang.ClassCastException: com.example.testdb.MainActivity$Select cannot be cast to java.lang.CharSequence
07-19 08:26:21.880: E/AndroidRuntime(2740):     at com.example.testdb.MainActivity$2.onClick(MainActivity.java:47)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at android.view.View.performClick(View.java:4204)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at android.view.View$PerformClick.run(View.java:17355)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at android.os.Handler.handleCallback(Handler.java:725)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at android.os.Handler.dispatchMessage(Handler.java:92)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at android.os.Looper.loop(Looper.java:137)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at android.app.ActivityThread.main(ActivityThread.java:5041)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at java.lang.reflect.Method.invokeNative(Native Method)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at java.lang.reflect.Method.invoke(Method.java:511)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
07-19 08:26:21.880: E/AndroidRuntime(2740):     at dalvik.system.NativeStart.main(Native Method)

そこで、コードをテストするために別のプロジェクトを作成しようとしました。2 つの単純なボタンがあります。1 つはレコードを挿入するためのもので、もう 1 つはTextView. 挿入は機能しますが、ボタンをクリックしてデータを取得すると、上記のエラーが表示され、アプリがクラッシュします。

以下は私のコードです:

public class MainActivity extends Activity 
{
static DatabaseImplementation di;
static SQLiteDatabase db;

Button btnInsert;
Button btnShow;
TextView txtView;

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

    di = new DatabaseImplementation(this);
    db = di.getWritableDatabase();

    btnInsert = (Button)findViewById(R.id.btnInsert);
    btnInsert.setOnClickListener(new View.OnClickListener() 
    {
        @Override
        public void onClick(View v)
        {
            new Insert().execute("");
        }
    });

    btnShow = (Button)findViewById(R.id.btnShow);
    btnShow.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) 
        {
            AsyncTask<String, Void, String> result = new Select().execute("");
            txtView = (TextView)findViewById(R.id.txtView);
            txtView.setText((CharSequence) result);
        }
    });
}

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}


private static class Insert extends AsyncTask<String, Void, String>
{       
    @Override
    protected String doInBackground(String... params)
    {
        try
        {       
            executeInsert();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

}

private static String executeInsert()
{
    return "INSERT INTO tbl_Test VALUES(1, 'Testing');";
}

private static class Select extends AsyncTask<String, Void, String>
{
    @Override
    protected String doInBackground(String... params)
    {
        try
        {
            String result = executeSelect();
            return result;
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

}

private static String executeSelect()
{
    return "SELECT test FROM tbl_Test WHERE _id = 1;";
}

}

そして、これは私の .xml です:

<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >


<Button 
    android:id="@+id/btnInsert"
    android:layout_width="100dp" 
    android:layout_height="wrap_content"
    android:text="Insert"/>

<Button 
    android:id="@+id/btnShow"
    android:layout_width="100dp" 
    android:layout_height="wrap_content"
    android:layout_toRightOf="@+id/btnInsert"
    android:text="Show"/>

<TextView
    android:id="@+id/txtView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_below="@+id/btnInsert"
    android:text=""/>

</RelativeLayout>

データベースが作成されていないと思われますが、作成されている場合は、挿入ボタンを押すとすぐにアプリがクラッシュします。何が問題なのかわかりますか?

編集:

申し訳ありません; SQLIteOpenHelper クラスを追加するのを忘れていました:

public class DatabaseImplementation extends SQLiteOpenHelper 
{
private final String createTable = "CREATE TABLE tbl_Test (_id INTEGER PRIMARY KEY, test TEXT)";

public DatabaseImplementation(Context context) 
{
    super(context, "databaseName", null, 1);

}

@Override
public void onCreate(SQLiteDatabase db) 
{
    db.execSQL(createTable);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
{


}

}

@sirackh 07-19 09:32:05.580: E/AndroidRuntime(9498): 致命的な例外: メイン 07-19 09:32:05.580: E/AndroidRuntime(9498): java.lang.NullPointerException 07-19 09:32: 05.580: E/AndroidRuntime(9498): android.database.sqlite.SQLiteProgram.(SQLiteProgram.java:43) 07-19 09:32:05.580: E/AndroidRuntime(9498): android.database.sqlite.SQLiteQuery. (SQLiteQuery.java:37) 07-19 09:32:05.580: E/AndroidRuntime(9498): android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44) 07-19 09:32:05.580: E /AndroidRuntime(9498): android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314) 07-19 09:32:05.580: E/AndroidRuntime(9498): android.database.sqlite.SQLiteDatabase.rawQuery( SQLiteDatabase.java:1253) 07-19 09:32:05.580:E/AndroidRuntime(9498): com.example.testdb.MainActivity$Select.onPostExecute(MainActivity.java:115) 07-19 09:32:05.580: E/AndroidRuntime(9498): com.example.testdb.MainActivity で$Select.onPostExecute(MainActivity.java:1) 07-19 09:32:05.580: E/AndroidRuntime(9498): android.os.AsyncTask.finish(AsyncTask.java:631) 07-19 09:32:05.580 : E/AndroidRuntime(9498): android.os.AsyncTask.access$600(AsyncTask.java:177) 07-19 09:32:05.580: E/AndroidRuntime(9498): android.os.AsyncTask$InternalHandler.handleMessage (AsyncTask.java:644) 07-19 09:32:05.580: E/AndroidRuntime(9498): android.os.Handler.dispatchMessage(Handler.java:99) 07-19 09:32:05.580: E/AndroidRuntime (9498): android.os.Looper.loop(Looper.java:137) 07-19 09:32:05.580: E/AndroidRuntime(9498): android.app.ActivityThread.main(ActivityThread.java:5041) 07-19 09:32:05.580: E/AndroidRuntime(9498): java.lang.reflect.Method.invokeNative(ネイティブ メソッド) 07-19 09:32:05.580: E /AndroidRuntime(9498): java.lang.reflect.Method.invoke(Method.java:511) 07-19 09:32:05.580: E/AndroidRuntime(9498): com.android.internal.os.ZygoteInit$ でMethodAndArgsCaller.run(ZygoteInit.java:793) 07-19 09:32:05.580: E/AndroidRuntime(9498): com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 07-19 09: 32:05.580: E/AndroidRuntime(9498): dalvik.system.NativeStart.main(ネイティブメソッド)511) 07-19 09:32:05.580: E/AndroidRuntime(9498): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 07-19 09:32:05.580: E/ AndroidRuntime (9498): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 07-19 09:32:05.580: E/AndroidRuntime (9498): dalvik.system.NativeStart.main (ネイティブ方法)511) 07-19 09:32:05.580: E/AndroidRuntime(9498): com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 07-19 09:32:05.580: E/ AndroidRuntime (9498): com.android.internal.os.ZygoteInit.main (ZygoteInit.java:560) 07-19 09:32:05.580: E/AndroidRuntime (9498): dalvik.system.NativeStart.main (ネイティブ方法)

4

2 に答える 2