Код: Выделить всё
package ru.tamachi.pacer;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;
public class IncommingCommandDBHelper extends SQLiteOpenHelper {
final static String INCOMMING_COMMAND_DB_NAME = "incommingcommand";
final static String INCOMMING_COMMAND_BODY_COLUMN_NAME = "cmdbody";
final static String INCOMMING_COMMAND_TIME_COLUMN_NAME = "cmdtime";
final static String INCOMMING_COMMAND_ANSWER_TO_PHONE_COLUMN_NAME = "cmdanswertophone";
final static String INCOMMING_COMMAND_ID_COLUMN_NAME = "_id";
private SQLiteDatabase m_readableDB = null;
public IncommingCommandDBHelper(Context context) {
super(context, INCOMMING_COMMAND_DB_NAME, null, 1);
if (!(m_readableDB==null)) {
m_readableDB.close();
}
m_readableDB = getReadableDatabase();
System.gc();
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL("create table " + INCOMMING_COMMAND_DB_NAME + " ( " + INCOMMING_COMMAND_ID_COLUMN_NAME
+ " integer primary key autoincrement, "
+ INCOMMING_COMMAND_TIME_COLUMN_NAME + " integer, "
+ INCOMMING_COMMAND_BODY_COLUMN_NAME + " text, "
+ INCOMMING_COMMAND_ANSWER_TO_PHONE_COLUMN_NAME + " text);");
}
public long add(final String cmdBody, final String answerToPhone) {
if (commandExists(cmdBody, answerToPhone)) {
return -1;
}
long result = -1;
try {
SQLiteDatabase db = getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put(INCOMMING_COMMAND_BODY_COLUMN_NAME, cmdBody);
contentValues.put(INCOMMING_COMMAND_TIME_COLUMN_NAME, System.currentTimeMillis());
contentValues.put(INCOMMING_COMMAND_ANSWER_TO_PHONE_COLUMN_NAME, answerToPhone);
result = db.insert(INCOMMING_COMMAND_DB_NAME, null, contentValues);
db.close();
} catch(Exception e) {
}
return result;
}
public Boolean commandExists(String cmdBody, String answerToPhone) {
String where ="("+INCOMMING_COMMAND_BODY_COLUMN_NAME+"=?) and ("+INCOMMING_COMMAND_ANSWER_TO_PHONE_COLUMN_NAME+"=?)";
Cursor cursor = m_readableDB.query(INCOMMING_COMMAND_DB_NAME, null, where, new String[] { cmdBody, answerToPhone }, null, null, null);
if (cursor==null) {
return false;
} else {
Boolean result = cursor.moveToFirst();
cursor.close();
return result;
}
}
public Cursor getCursor() {
String orderby = INCOMMING_COMMAND_TIME_COLUMN_NAME+" asc";
Cursor cursor = null;
try {
cursor = m_readableDB.query(INCOMMING_COMMAND_DB_NAME, null, null, null, null, null, orderby);
} catch (Exception e) {
cursor = null;
}
return cursor;
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
Вот обращение к этому классу из BroadcastReceiver:
Код: Выделить всё
private static void storeSomething(final Context context, final String phoneNumber, final String body) {
if (!(m_dbHelper==null)) {
m_dbHelper = new IncommingCommandDBHelper(context);
}
Toast.makeText(context, "DEBUG POINT A", 6000).show();
m_dbHelper.add(body, phoneNumber);
Toast.makeText(context, "DEBUG POINT B", 6000).show();
}
Однако практика показывает, что приложение падает при выполнении лексемы
m_dbHelper.add(body, phoneNumber);
Сообщение "DEBUG POINT A" отображается, но сообщение "DEBUG POINT B" не отображается.
У же неделю пытаюсь найти причину!
Подскажите, кто знает, в чём фишка?
Очередной баг или я что-то не так делаю.