2012-03-16 7 views
0

2番目のアクティビティからデータを表示する際に問題が発生しました。 メソッドgetDataを実行すると、2番目のアクティビティがクラッシュします。SQLiteデータベースから読み取ることができません。アクティビティカーソルからデータを取得中にクラッシュする

クラスDabase

public static final String KEY_ROWID = "ExpenseID";  
    public static final String KEY_Expense = "ExpenseDescription"; 
    public static final String KEY_Amount = "Amount"; 

    private static final String DATABASE_NAME = "CSolutionsLlcBudget"; 
    private static final String DATABASE_TABLE = "Expense"; 

    private static final int DATABASE_VERSION = 4; 
    private static final String CREATE_TABLE_1 = "CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
    + KEY_Expense + "TEXT NOT NULL, " + KEY_Amount + "TEXT NOT NULL);"; 

    private DbHelper ourHelper; 
    private final Context ourContext; 
    private SQLiteDatabase ourDatabase; 

    private static class DbHelper extends SQLiteOpenHelper{ 

     public DbHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 
      // TODO Auto-generated constructor stub 

     } 

     @Override 
     public void onCreate(SQLiteDatabase db) { 
      // TODO Auto-generated method stub   
      db.execSQL(CREATE_TABLE_1);   
     }//end of onCreate 

     @Override 
     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      // TODO Auto-generated method stub 
      db.execSQL("DROP TABLE IF EXISTS " + DATABASE_TABLE);   
      onCreate(db); 
     } 

    }//end of class 
    public BudgetInfo(Context c){ 
     ourContext = c; 
    } 

    public BudgetInfo open() throws SQLException{ 
     ourHelper = new DbHelper(ourContext); 
     ourDatabase = ourHelper.getWritableDatabase(); 
     return this; 
    } 
    public void close(){ 
     ourHelper.close(); 
    } 

    public long createEntry(String expense, String amount) { 
     // TODO Auto-generated method stub 
     ContentValues cv = new ContentValues(); 
     cv.put(KEY_Expense, expense); 
     cv.put(KEY_Amount, amount); 
     return ourDatabase.insert(DATABASE_TABLE, null, cv); 
    } 

    public String getData() { 
     // TODO Auto-generated method stub 
     String[] columns = new String[]{KEY_ROWID, KEY_Expense, KEY_Amount}; 
     Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null, null, null); 
     String result = ""; 


     int iRow = c.getColumnIndex(KEY_ROWID); 
     int iExpense = c.getColumnIndex(KEY_Expense); 
     int iAmount = c.getColumnIndex(KEY_Amount); 

     for(c.moveToFirst();!c.isAfterLast(); c.moveToNext()){ 
      result = result + c.getString(iRow) + " " + c.getString(iExpense) + " " + c.getString(iAmount) + "\n"; 
     } 
     return result; 
    } 

セカンド活動

public class SQLView extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.sqlview); 
     TextView tv = (TextView) findViewById(R.id.tvSQLinfo); 
     BudgetInfo info = new BudgetInfo(this); 
     info.open(); 
     String data = info.getData();   
     tv.setText(data); 
     info.close(); 
    } 
} 

アプリは私が第二の活動に

+1

あなたはクラッシュlogcat情報を貼り付けることができますか? – idiottiger

+0

あなたはどこにデータベースの挿入を行っていますか? –

答えて

2

を。以前の活動でデータをureテーブルに挿入していると仮定しています。

  1. データベースが正しく作成されていることを確認します。

  2. データベースにデータがあることを確認します。

  3. また、カーソルがnullでないことを確認し、movetofirst()にtrueを返します。 (これはあなたが他の投稿からあなたの解決策を得た場合でも行う必要があります)。

  4. 終了したら、必ずカーソルを閉じます。私はここでそれをやっているとは思わない。

+0

助けてくれてありがとう – user996502

1

を見るためにクリックするたびにクラッシュ私はあなたが

BudgetInfo info = new BudgetInfo(this); 
を交換しようとすることができると思います

BudgetInfo info = new BudgetInfo(getApplicationContext()); 

にし、使用しようとする場合があります。

private static final String CREATE_TABLE_1 = "CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
    + KEY_Expense + "TEXT NOT NULL, " + KEY_Amount + "TEXT NOT NULL);"; 

はあなたのcollunm名の間にスペースがなく、後のテキストを宣言することがあります。最後に

c.getString(cursor.getColumnIndex(iRow)) 
c.getString(cursor.getColumnIndex(iExpense)) 
c.getString(cursor.getColumnIndex(iAmount)) 

、この行を確認してください。

あなたはこの試みることがあります。ここでuは最初に試すgottoいくつかのことを

private static final String CREATE_TABLE_1 = "CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
    + KEY_Expense + " TEXT NOT NULL, " + KEY_Amount + " TEXT NOT NULL);"; 
関連する問題