Hy!Я пытаюсь создать приложение, которое ищет данные GPS, которые были сохранены в базе данных SQlite.Но я столкнулся с проблемой: я создал класс DbAdapter, который создает мою базу данных, и теперь я пытаюсь из другого класса перевести курсор на все мои данные, используя эту функцию:
public Cursor fetchAllData() {
return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_LONGITUDE,KEY_LATITUDE,KEY_COUNTRY,KEY_TOWN,KEY_STREET}, null, null, null, null, null);
}
Теперь,Я создаю экземпляр DbAdapter в моем новом классе, но я получаю forceclose, когда вставляю эту строку: Cursor c = db.fetchAllData ();
Класс, который создает мою базу данных, выглядит следующим образом:
package test.android;
import java.util.ArrayList;
import java.util.List;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class CoordonateDbAdapter {
public static final String KEY_ROWID = "_id";
public static final String KEY_LONGITUDE= "longitude";
public static final String KEY_LATITUDE = "latitude";
public static final String KEY_COUNTRY= "country";
public static final String KEY_TOWN= "town";
public static final String KEY_STREET = "street";
private static final String TAG = "CoordonateDbAdapter";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_CREATE =
"create table car1 (_id integer primary key autoincrement, "
+ "longitude text not null, latitude text not null," +
"country text not null,town text not null,street text not null);";
private static final String DATABASE_NAME = "gps";
private static final String DATABASE_TABLE = "masini";
private static final int DATABASE_VERSION = 1;
private final Context mCtx;
private static class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w(TAG, "Upgrading database from version " + oldVersion + " to "
+ newVersion + ", which will destroy all old data");
db.execSQL("DROP TABLE IF EXISTS notes");
onCreate(db);
}
}
public CoordonateDbAdapter(Context ctx) {
this.mCtx = ctx;
}
public CoordonateDbAdapter open() throws SQLException {
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close() {
mDbHelper.close();
}
public long insertData(String longitude, String latitude, String country, String town, String street) {
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_LONGITUDE, longitude);
initialValues.put(KEY_LATITUDE, latitude);
initialValues.put(KEY_COUNTRY, country);
initialValues.put(KEY_TOWN, town);
initialValues.put(KEY_STREET, street);
return mDb.insert(DATABASE_TABLE, null, initialValues);
}
public boolean deleteData(long rowId) {
return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null) > 0;
}
public Cursor fetchAllData() {
return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_LONGITUDE,KEY_LATITUDE,KEY_COUNTRY,KEY_TOWN,KEY_STREET}, null, null, null, null, null);
}
public Cursor fetchData(long rowId) throws SQLException {
Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[]
{KEY_ROWID, KEY_LONGITUDE,KEY_LATITUDE,KEY_COUNTRY,KEY_TOWN,KEY_STREET},
KEY_ROWID + "=" + rowId, null, null, null, null, null);
if (mCursor != null) {
mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateNote(long rowId, String longitude, String latitude,String country, String town,String street) {
ContentValues args = new ContentValues();
args.put(KEY_LONGITUDE, longitude);
args.put(KEY_LATITUDE, latitude);
args.put(KEY_COUNTRY, country);
args.put(KEY_TOWN, town);
args.put(KEY_STREET, street);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null) > 0;
}
public List<String> selectAll() {
List<String> list = new ArrayList<String>();
Cursor cursor = this.mDb.query(DATABASE_TABLE, new String[] { "longitude"},
null, null, null, null, "name desc");
if (cursor.moveToFirst()) {
do {
list.add(cursor.getString(0));
} while (cursor.moveToNext());
}
if (cursor != null && !cursor.isClosed()) {
cursor.close();
}
return list;
}
}
И класс, который получает данные GPS, выглядит следующим образом:
package test.android;
import java.util.List;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.Toast;
public class screen_database extends Activity{
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen_database);
CoordonateDbAdapter db = new CoordonateDbAdapter(this);
db.open();
long id;
// id= db.insertData("-36.2", "125","Romania","Cluj","Zorilor");
// db.insertData("44", "55","Romania","Iasi","Alexandru Ioan Cuza");
// List<String> names = db.selectAll();
Cursor c=db.fetchAllData();
/* if (c.moveToFirst())
{
do {
// DisplayTitle(c);
} while (c.moveToNext());
}*/
// c.close();
}
/* public void DisplayTitle(Cursor c)
{
Toast.makeText(this,
"longitude: " + c.getString(0) + "\n" +
"latitude: " + c.getString(1) + "\n" +
"country: " + c.getString(2) + "\n" +
"town: " + c.getString(3),
Toast.LENGTH_LONG).show();
}*/
}
//}
Вы можете увидеть множество строк, которые являются комментариями, потому что я получаю принудительное закрытие, когда я спрашиваюдля курсора, поэтому я постарался сделать это как можно проще.Нужны ли мне какие-либо разрешения для работы с курсорами, потому что я посмотрел в Интернете, и весь строчный код выглядит как мой ?!Другая проблема заключается в том, что мое приложение довольно большое, и я получаю доступ к этим классам из других классов ... длинного ряда классов, пока не получу запрос от Sqlite.Я был бы очень признателен, если бы вы мне помогли, это может быть что-то простое, но я не могу понять, что это. Спасибо !!!