РЕДАКТИРОВАТЬ: Я думаю, что я, возможно, нашел проблему.Мне нужно работать над моим классом SmartDBHelper.Сделаем это и опубликуем результаты здесь.
РЕДАКТИРОВАТЬ: Нашел ссылку на кого-то, у кого есть аналогичные проблемы.Будет проверять это, чтобы увидеть, если это исправить как можно скорее. Другой пост
РЕДАКТИРОВАТЬ: Обновлено, чтобы отразить некоторые изменения, предложенные некоторыми из постеров.Проблема по-прежнему возникает.
ПОСЛЕ НИЖЕ:
Моему приложению необходимо иметь возможность записи в базу данных sqlite3, которая находится на андроиде, из двух разных событий.Одним из моих событий является запись в базу данных просто отлично.Когда второе событие пытается записать в базу данных, возникает присоединенная ошибка.Я понятия не имею, почему это происходит или как это исправить.За последние пару часов я перепробовал множество вещей и погуглил тонну.Может кто-нибудь, пожалуйста, просмотрите приведенный ниже код и сообщите мне, что вы думаете?
Если вам нужна дополнительная информация, пожалуйста, сообщите мне как можно скорее.
Заранее спасибо!
//This is the sqliteopenhelper i created
public class SmartDBHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "smart_lite_db.db";
private static final int DATABASE_VERSION = 2;
private static final String NOTIFY_TABLE_NAME = "user_notify_data";
private static final String HR_TABLE_NAME = "user_hr_data";
private static final String NOTIFY_TABLE_CREATE =
"CREATE TABLE " + NOTIFY_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"userresponse INTEGER, " +
"notifytime INTEGER);";
private static final String DATA_TABLE_CREATE =
"CREATE TABLE " + HR_TABLE_NAME +
" (counter INTEGER PRIMARY KEY, " +
"hr INTEGER, " +
"act INTEGER, " +
"timestamp INTEGER);";
public SmartDBHelper(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
Log.v("smartdbhelper", "before creation");
db.execSQL(NOTIFY_TABLE_CREATE);
Log.v("smartdbhelper", "middle creation");
db.execSQL(DATA_TABLE_CREATE);
Log.v("smartdbhelper", "after creation");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
}
}
//This is the part that is working CORRECTLY
public class DataNotificationSurvey extends Activity {
private SmartDBHelper dBHelper;
private Date timeStamp;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.datanotificationlayout);
Log.v("datanotificationsurvey", "inside datanotificationsurvey");
dBHelper = new SmartDBHelper(this);
timeStamp = new Date(DataNotification.when);
// XML code stuff left out here, was not needed
}
public void submitNotify(int tempType, Date tempDate) {
SQLiteDatabase dBH = dBHelper.getWritableDatabase();
ContentValues values = new ContentValues();
values.put("userresponse", tempType);
values.put("notifytime", (tempDate.getTime()/1000));
dBH.insert("user_notify_data", null, values);
dBH.close();
}
}
// This is the event that is NOT working correctly
public class DataBuilder extends Activity {
private List _listeners = new ArrayList();
private SmartDataObject data;
Context tThis;
private SmartDBHelper dBHelper;
private Date timeStampReference; //for keeping track of the first time
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.v("databuilder", "on create");
dBHelper = new SmartDBHelper(this);
}
public void prepareData(SmartDataObject temp) {
submitData(temp);
}
public void submitData(SmartDataObject temp) {
data = temp;
System.out.println("Where: DB-submitData");
try {
SQLiteDatabase dBH = dBHelper.getWritableDatabase(); // CODE FAILS AT THIS POINT
Log.v("databuilder", "after writable");
ContentValues values = new ContentValues();
values.put("hr", data.getHeartRate());
values.put("act", data.getAct());
values.put("timestamp", data.getTimeStamp());
dBH.insert("user_hr_data", null, values);
Log.v("databuilder", "after insert");
dBH.close();
fireDataBuilderEvent(data);
}
catch(SQLException e) {
e.printStackTrace();
}
catch(NullPointerException e) {
e.printStackTrace();
}
}
public synchronized void addDataBuilderListener(DataBuilderListener listener) {
_listeners.add(listener);
}
public synchronized void removeDataBuilderListener(DataBuilderListener listener) {
_listeners.remove(listener);
}
private synchronized void fireDataBuilderEvent(SmartDataObject temp) {
DataBuilderEvent dRE = new DataBuilderEvent(this, temp);
Iterator listeners = _listeners.iterator();
while(listeners.hasNext()) {
((DataBuilderListener)listeners.next()).dataBuilderReceived(dRE);
}
}
public interface DataBuilderListener {
public void dataBuilderReceived(DataBuilderEvent event);
}
}
// The error that is occuring.
03-13 17:38:40.130: INFO/System.out(279): Where: DB-submitData
03-13 17:38:40.130: WARN/System.err(279): java.lang.NullPointerException
03-13 17:38:40.151: WARN/System.err(279): at cpe495.smartapp.DataBuilder.submitData(DataBuilder.java:41)
03-13 17:38:40.151: WARN/System.err(279): at cpe495.smartapp.DataBuilder.prepareData(DataBuilder.java:34)
03-13 17:38:40.171: WARN/System.err(279): at cpe495.smartapp.SmartApp$2.dataAnalyzedReceived(SmartApp.java:56)
03-13 17:38:40.171: WARN/System.err(279): at cpe495.smartapp.DataRobot.fireDataAnalyzedEvent(DataRobot.java:269)
03-13 17:38:40.181: WARN/System.err(279): at cpe495.smartapp.DataRobot.analyzeData(DataRobot.java:79)
03-13 17:38:40.181: WARN/System.err(279): at cpe495.smartapp.SmartApp$1.dataReceivedReceived(SmartApp.java:49)
03-13 17:38:40.191: WARN/System.err(279): at cpe495.smartapp.ConnectDevice.fireDataReceivedEvent(ConnectDevice.java:79)
03-13 17:38:40.201: WARN/System.err(279): at cpe495.smartapp.ConnectDevice.run(ConnectDevice.java:46)
03-13 17:38:40.211: WARN/System.err(279): at java.lang.Thread.run(Thread.java:1096)