Я строю интерфейс поиска. База данных использует полнотекстовый поиск для запроса базы данных.JAVA.LANG.ILLEGEALSTATEEXCEPTION: не удалось выполнить способ действия ..!
У меня есть электронная книга table- столбцы
title | author | publisher | edition content
«Содержание» Колонка содержит описание книги. В пользовательском интерфейсе у меня есть поле ввода edittext. Из этого поля я вводим слово или фразу, а слово или фразу сопоставляются с содержимым столбца (с использованием запроса MATCH). Если совпадение найдено, должны отображаться детали (например, название, автор, издатель, издание). У меня есть класс и класс базы данных. Но каждый раз, когда я получаю исключение:
java.lang.illegalstateexception: could not execute method of the activity
Два кодов, которые я предоставляю.
Основной класс
package com.search.wordfinder;
import java.util.ArrayList;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void onClickChange(View v){
EditText searchText = (EditText)findViewById(R.id.edit_message);
String searchId = searchText.getText().toString();
setContentView(R.layout.nextpage);
ListView list=(ListView)findViewById(R.id.list);
DatabaseCreation dc = new DatabaseCreation(this);
ArrayList<String> rslt = dc.queryDatabase(searchId);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, rslt);
list.setAdapter(adapter);
dc.close();
}
public void onClickBack(View v){
setContentView(R.layout.main);
}
}
БАЗА ДАННЫХ КЛАСС
package com.search.wordfinder;
import java.util.ArrayList;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.content.ContentValues;
import android.util.*;
public class DatabaseCreation extends SQLiteOpenHelper {
String sString;
SQLiteDatabase mDatabase;
String query;
public static final String DATABASE_NAME = "wor.db";
public static final int DATABASE_VERSION = 1;
public static final String TABLE_NAME = "cpy";
private static String DATABASE_CREATE = "CREATE VIRTUAL TABLE " + TABLE_NAME + " USING FTS3" + "(" + "title TEXT," + "author TEXT," + "publisher TEXT," + "edition TEXT," + "content TEXT" + ")";
public DatabaseCreation(Context context) {
super(context, DATABASE_NAME,null,DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
try{
//db.delete(TABLE_NAME, null, null);
db.execSQL(DATABASE_CREATE);
insertData("Operating System", "PeterGalvin", "Willey", "Eight", "An operating System (OS) is a collection of software that manages computer hardware resources and provides common services for computer programs.");
insertData("Database Management System", "Korth", "McGraw-Hill", "Fourth", "A DataBase Management System (DBMS) is a software system that manages execution of users applications to access and modify database.");
} catch (Exception e){
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(DatabaseCreation.class.getName(),"Upgrading database from version" +
oldVersion + "to" + newVersion + ",which will destroy all old data");
db.execSQL("Drop table if exists" + TABLE_NAME);
onCreate(db);
}
public void insertData(String ttl, String athr, String pub, String ed, String cnt){
mDatabase = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("title", ttl);
values.put("author", athr);
values.put("publisher", pub);
values.put("edition", ed);
values.put("content", cnt);
mDatabase.insert(TABLE_NAME, null, values);
}
public ArrayList<String> queryDatabase(String id){
sString=id;
ArrayList<String> data = new ArrayList<String>();
try{
query = "SELECT title,author,publisher,edition FROM " + TABLE_NAME + " WHERE content MATCH '"+sString+"'";
Cursor c = mDatabase.rawQuery(query, null);
c.moveToFirst();
while(c.isAfterLast()==false){
String str = "Title: " + c.getString(0) +"\n"+ "Author: " + c.getString(1)+ "\n" + "Publisher: " + c.getString(2) + "\n" +
"Edition: " + c.getString(3);
data.add(str);
c.moveToNext();
}
c.close();
} catch (Exception e){
e.printStackTrace();
}
return data;
}
}
Где вы делаете исключение? Что скажет вам стек? – djna
Кроме того, это много кода. Не могли бы вы разместить как можно меньше кода? –
Стек сообщает, что он получает исключение NullPointerException в функциях querydatabase() и onClickChange(). Должен ли я предоставить tou файлы main.xml, nextpage.xml, strings.xml .. ????? –