こんにちはみんな私はあなたが電話を受けているときに位置を保存するアプリケーションを構築しています。残念ながら、SQLエラーが発生しましたが、エラーがどこにあるのか理解できません。コードはこれです:
ファイルstorybookdynamicimport.java
public void CaptureCall() {
// Declare a telephony manager
TelephonyManager tm = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
// Declare a phoneStateListener
PhoneStateListener mPhoneListener;
// Switching trough various cases
mPhoneListener = new PhoneStateListener() {
public void onCallStateChanged(int state, String incomingNumber) {
String phonenumber=null;
String currentDate;
String Loc;
ContentValues cv = new ContentValues();
try {
switch (state) {
case TelephonyManager.CALL_STATE_RINGING:
Log.v(StorybookContentProvider.TAG_LOG,
"sei in chiamata");
phonenumber= findNameByAddress(StorybookDynamicImport.this, incomingNumber);
currentDate = formatDate(System.currentTimeMillis());
// Sending a statusbar Notification
CallNotification = notificationBuilder("StoryBook",
"Ho salvato l'evento chiamata!", null);
NotificationManager.notify(1, CallNotification);
// Getting the position
LocationManager.requestSingleUpdate(criteria,
locationListener, looper);
Location location = LocationManager
.getLastKnownLocation(provider);
Loc=GetAddressLocation(location);
cv.put(StorybookContentProvider.CONTACT, phonenumber);
Log.v(StorybookContentProvider.TAG_LOG, "Salvando" + phonenumber);
cv.put(StorybookContentProvider.DATE, currentDate);
Log.v(StorybookContentProvider.TAG_LOG, "Data" + currentDate);
cv.put(StorybookContentProvider.EVENT_TYPE, "Chiamata");
cv.put(StorybookContentProvider.WHERE, "cazzi miei!");
Log.v(StorybookContentProvider.TAG_LOG, "DOVE" + Loc);
getContentResolver().insert(StorybookContentProvider.CONTENT_URI, cv);
break;
}
} catch (Exception e) {
// TODO: handle exception
}
}
};
// Setting listener
tm.listen(mPhoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}
private String formatDate(long date) {
Date realdate = new Date(date);
DateFormat df = new DateFormat();
String format = (String) df.format("dd/MM/yyyy", realdate);
//Log.v(StorybookContentProvider.TAG_LOG, "data della chiamata" + format);
return format;
}
private String findNameByAddress(Context ct, String addr) {
Uri myPerson = Uri.withAppendedPath(
ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,
Uri.encode(addr));
String[] projection = new String[] { ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME };
Cursor cursor = ct.getContentResolver().query(myPerson, projection,
null, null, null);
if (cursor.moveToFirst()) {
String name = cursor
.getString(cursor
.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
Log.e("", "Found contact name");
cursor.close();
return name;
}
cursor.close();
Log.e("", "Not Found contact name");
return addr;
}
ファイルstorybookcontentprovider.java
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "Storybook.db";
public static final int DATABASE_VERSION = 1;
public static final String DATABASE_TABLE_CONTACT = "contact_data";
public MySQLiteOpenHelper(Context context, String name,
CursorFactory factory, int version) {
super(context, name, factory, version);
}
// SQL statement to create a new database.
/*
* private static final String DATABASE_CREATE = "create table " +
* DATABASE_TABLE + " (" + KEY_ID +
* " integer primary key autoincrement, " + CONTACT + " text not null, "
* + CONTACT_ID + "text" + EVENT_TYPE + "text);";
*/
// Called when no database exists in disk and the helper class needs
// to create a new one.
@Override
public void onCreate(SQLiteDatabase db) {
StringBuilder createQuery = new StringBuilder();
createQuery.append("CREATE TABLE \"" + DATABASE_TABLE_CONTACT + "\" (");
createQuery.append(" \"" + KEY_ID + "\" INTEGER PRIMARY KEY AUTOINCREMENT,");
createQuery.append(" \"" + CONTACT + "\" TEXT,");
createQuery.append(" \"" + EVENT_TYPE + "\" TEXT,");
createQuery.append(" \"" + URI + "\" TEXT,");
createQuery.append(" \"" + DATE + "\" DATE,");
createQuery.append(" \"" + WHERE + "\" TEXT");
createQuery.append(")");
db.execSQL(createQuery.toString());
Log.v(TAG_LOG, "database succesfully created");
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// Open a read / write database to support the transaction.
SQLiteDatabase db = myOpenHelper.getWritableDatabase();
// To add empty rows to your database by passing in an empty Content
// Values
// object, you must use the null column hack parameter to specify the
// name of
// the column that can be set to null.
String nullColumnHack = null;
// Insert the values into the table
long id = db.insert(MySQLiteOpenHelper.DATABASE_TABLE_CONTACT, nullColumnHack,
values);
if (id > -1) {
// Construct and return the URI of the newly inserted row.
Uri insertedId = ContentUris.withAppendedId(CONTENT_URI, id);
// Notify any observers of the change in the data set.
getContext().getContentResolver().notifyChange(insertedId, null);
return insertedId;
} else
return null;
}
このエラーがあります:
10-29 10:51:00.128: I/SqliteDatabaseCpp(896): sqlite returned: error code = 1, msg = near "where": syntax error, db=/data/data/com.paki.storybook/databases/Storybook.db
10-29 10:51:02.658: E/SQLiteDatabase(896): Error inserting where=cazzi miei! date=29/10/2012 contact=Pasquale Lodise event_type=Chiamata
10-29 10:51:02.658: E/SQLiteDatabase(896): android.database.sqlite.SQLiteException: near "where": syntax error: , while compiling: INSERT INTO contact_data(where,date,contact,event_type) VALUES (?,?,?,?)
10-29 10:51:02.658: E/SQLiteDatabase(896): at android.database.sqlite.SQLiteCompiledSql.native_compile(Native Method)