2012-03-19 22 views
0

コードにマークされているNullPointerExceptionが発生しています。SQLiteDatabseでNullPointerExceptionが発生する

通常、コードはプロジェクト内の生のフォルダのテキストファイルを読み込み、その内容をデータベースのテーブルに挿入します。生のフォルダのテキストファイルには、スペルチェックの目的で、英語の単語のリストが含まれています。この問題に関して誰も助けてくれませんか?

public class WordsDB 
{ 
    private static final String FTS_WORD_DB="FTS_WORD_DB"; 
private static final String WORD="WORD"; 
private static final String FTS_WORD_DB_CREATE="CREATE VIRTUAL TABLE "+FTS_WORD_DB+" USING ft3 ("+WORD+");"; 
private static final String WORD_DATABASE="WORD_DATABSE"; 
private static final int DATABSE_VERSION=1; 
private WordsDBLoadHelper helper; 
public static SQLiteDatabase wordDb; 

public WordsDB(Context context) 
{ 
    helper=new WordsDBLoadHelper(context); 
} 

public void load() 
{ 
    helper.loadWordDb(); 
} 

public class WordsDBLoadHelper extends SQLiteOpenHelper 
{ 
    public WordsDBLoadHelper(Context context) 
    { 
     super(context, WORD_DATABASE, null, DATABSE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     wordDb=db; 
     wordDb.execSQL(FTS_WORD_DB_CREATE); 
    } 

    public void loadWordDb() 
    { 
     Resources resource=SearchDict.context.getResources(); 
     InputStream is=resource.openRawResource(R.raw.wordlist); 
     BufferedReader br=new BufferedReader(new InputStreamReader(is)); 
     String line; 
     try 
     { 
      while((line=br.readLine())!=null) 
      { 
       addWord(line.trim()); 
      } 
     } 
     catch (Exception e) 
     { 
      Log.e(null, e.getStackTrace().toString(), e); 
     } 
    } 

    public void addWord(String line) 
    { 
     try 
     { 
      ContentValues values=new ContentValues(); 
      values.put(WORD, line); 
      wordDb.insert(FTS_WORD_DB, null, values); 
     } 
     catch(Exception e) 
     { 
      Log.e(null, e.getStackTrace().toString(), e); 
     } 
    } 

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

テーブルを作成して値を挿入する方法はありません。上記の手順では、テキストファイルに3つ以上の単語が含まれているため、データベースに値を挿入するのに約1時間以上かかります。 データベースを一度作成して永続的に保存することができます。これにより、プロジェクトの実行時にデータベースを何度も再作成せずに値を取得できるようになります。

+0

あなたのprogressDialogはどこですか?私は上記のコードでそれを見ることはできません。 – Rajkiran

+0

タイトルに申し訳ありません。 –

答えて

0

一般に、Sqliteの挿入はかなり高速ですが、コミットは遅いです。あなたはトランザクションを使用していないので、各挿入後にsqliteはコミットを行います。

wordDB.startTransaction(); 
try { 

    /*while loop*/ 

    wordDB.setTransactionSuccessful(); 
} finally { 
db.endTransaction(); 
} 
+0

例外はまだスローされています。 –

関連する問題