2012-02-11 2 views
0

Я следую учебник, и пытается создать базу данных, а затем добавить пут текстов в базу данных, но сбой приложения, когда он достигает «.Open()»Почему база данных sqlite не открыта?

public class SmsReceiver extends BroadcastReceiver 
{ 
CommentsDataSource datasource; 


@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Log.d("tag", "0"); 
    datasource = new CommentsDataSource(this); 
    Log.d("tag", "1"); 
    datasource.open(); 



    Log.d("tag", "2"); 
    // ---get the SMS message passed in--- 
    Bundle bundle = intent.getExtras(); 
    SmsMessage[] msgs = null; 
    //String str = ""; 
    if (bundle != null) { 
     // ---retrieve the SMS message received--- 
     Object[] pdus = (Object[]) bundle.get("pdus"); 
     msgs = new SmsMessage[pdus.length]; 
     for (int i = 0; i < msgs.length; i++) { 
      msgs[i] = SmsMessage.createFromPdu((byte[]) pdus[i]); 
      String str = msgs[i].getOriginatingAddress(); 
      //str += " :"; 
      String str2 =msgs[i].getMessageBody().toString(); 
      //str += "\n"; 
      Log.d("tag", "3"); 
      abortBroadcast(); 
      Log.d("tag", "4"); 
    String From = "Send: " + str + " Message: " + str2; 
      Log.d("tag", "5"); 

TestDatabaseActivity Test = new TestDatabaseActivity(); 
      ArrayAdapter<Comment> adapter = (ArrayAdapter<Comment>)  Test.getListAdapter(); 
      Comment comment; 
      Log.d("tag", "6"); 

      String[] comments = new String[] { From }; 
      Log.d("tag", "7"); 
      int nextInt = new Random().nextInt(3); 
      Log.d("tag", "8"); 
      // Save the new comment to the database 
      comment = datasource.createComment(comments[nextInt]); 
      Log.d("tag", "9"); 
      adapter.add(comment); 
      Log.d("tag", "10"); 
      datasource.close(); 
      break; 

     } 
    } 
} 
} 

и вот база данных:

public class CommentsDataSource { 

// Database fields 
private SQLiteDatabase database; 
private MySQLiteHelper dbHelper; 
private String[] allColumns = { MySQLiteHelper.COLUMN_ID, 
     MySQLiteHelper.COLUMN_COMMENT }; 

public CommentsDataSource(Context context) { 
    dbHelper = new MySQLiteHelper(context); 
} 

public CommentsDataSource(SmsReceiver smsReceiver) { 
    // TODO Auto-generated constructor stub 
} 

public void open() { 
    database = dbHelper.getWritableDatabase(); 
} 

public void close() { 
    dbHelper.close(); 
} 

public Comment createComment(String comment) { 
    ContentValues values = new ContentValues(); 
    values.put(MySQLiteHelper.COLUMN_COMMENT, comment); 
    long insertId = database.insert(MySQLiteHelper.TABLE_COMMENTS, null, 
      values); 
    // To show how to query 
    Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS, 
      allColumns, MySQLiteHelper.COLUMN_ID + " = " + insertId, null, 
      null, null, null); 
    cursor.moveToFirst(); 
    return cursorToComment(cursor); 
} 

public void deleteComment(Comment comment) { 
    long id = comment.getId(); 
    System.out.println("Comment deleted with id: " + id); 
    database.delete(MySQLiteHelper.TABLE_COMMENTS, MySQLiteHelper.COLUMN_ID 
      + " = " + id, null); 
} 

public List<Comment> getAllComments() { 
    List<Comment> comments = new ArrayList<Comment>(); 
    Cursor cursor = database.query(MySQLiteHelper.TABLE_COMMENTS, 
      allColumns, null, null, null, null, null); 
    cursor.moveToFirst(); 
    while (!cursor.isAfterLast()) { 
     Comment comment = cursorToComment(cursor); 
     comments.add(comment); 
     cursor.moveToNext(); 
    } 
    // Make sure to close the cursor 
    cursor.close(); 
    return comments; 
} 

private Comment cursorToComment(Cursor cursor) { 
    Comment comment = new Comment(); 
    comment.setId(cursor.getLong(0)); 
    comment.setComment(cursor.getString(1)); 
    return comment; 
} 
} 

LogCat получает помечать 0, то 1, то он говорит: «не удается запустить приемник»

Что происходит, и почему он не будет открывать?

ответ

1

заменить это с контекстом в конструкторе:

datasource = new CommentsDataSource(this); 

в

datasource = new CommentsDataSource(context); 
+0

О сладко! теперь он передает это, и он терпит неудачу в комментарии = datasource.createComment (комментарии [nextInt]); ... почему это работает? Что именно он делает? – Christian

+0

Это одна вещь удерживала меня на некоторое время, и я оставил позабыл. В любом случае спасибо за помощь, которую я действительно ценю! – Christian

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