2013-07-05 3 views
-4

Я строю интерфейс поиска. База данных использует полнотекстовый поиск для запроса базы данных.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; 
    } 
} 
+4

Где вы делаете исключение? Что скажет вам стек? – djna

+0

Кроме того, это много кода. Не могли бы вы разместить как можно меньше кода? –

+0

Стек сообщает, что он получает исключение NullPointerException в функциях querydatabase() и onClickChange(). Должен ли я предоставить tou файлы main.xml, nextpage.xml, strings.xml .. ????? –

ответ

1

Трассировка стека говорит:

java.lang.NullPointerException 
    at com.search.wordfinder.DatabaseCreation.insertData(DatabaseCreation.java:59) 

Учитывая содержание этого метода, линия 59 должна быть следующей:

mDatabase.insert(TABLE_NAME, null, values); 

И если в этой строке возникает NullPointerException, это означает, что mDatabase имеет значение NULL. Поэтому проверьте, была ли эта переменная инициализирована в любом месте. Это не так: я не вижу никакой линии, как

mDatabase = ...; 

Итак, инициализируйте эту переменную.

+0

У меня есть инициализированная база данных mDatabase = this.getWritableDatabase(); внутри функции insertData(). Но все еще не работает. Кто угодно, помогите. Если потребуется, я могу предоставить вам файлы xml тоже ..! Пожалуйста помоги..! –

+0

проблем нет. Трассировка стека не сообщает об ошибке. Но все же нет выхода. Я просто не могу найти причину. Пожалуйста, помогите ..! –

+0

Теперь отображается ошибка «нет такой таблицы» Ошибка: android.database.sqlite.SQLiteException: нет такой таблицы: cpy (код 1): при компиляции: SELECT title, author, publisher, edition FROM cpy WHERE content MATCH 'system' Прошу помочь. Я долго стоял здесь. Помощь pLeaase. –

Смежные вопросы