Я чувствую, что это немного вопрос о нобе, и мне не хватает чего-то очевидного, но я просто привыкаю к программированию на Android, и я столкнулся с проблемой с SQLiteDatabase и ListView ,ListView не отображает все данные в базе данных
Ранее на сегодня я создал ListView, который отображает список приборов из базы данных. Я заработал, сохранил и оставил его. Я вернулся к нему и добавил в базу данных еще несколько приборов, однако при повторном запуске приложения только первые 4 светильника продолжают появляться (те, которые я создал изначально), когда есть 18 светильников.
Вот класс FixtureDB:
public class FixturesDB extends SQLiteOpenHelper {
//Database name
private static String dbname = "fixtureList";
//Database version
private static int version = 1;
//Primary key field
public static final String KEY_ROW_ID = "_id";
//Field which stores the fixture data
public static final String KEY_DATE = "fixture_date";
//Field which stores the fixture team
public static final String KEY_TEAM = "fixture_team";
//Field which stores the fixture competition
public static final String KEY_COMPETITION = "fixture_competition";
//Constant to store the table name
public static final String DATABASE_TABLE = "fixture_table";
//Instance variable for SQLiteDatabase
private SQLiteDatabase mDB;
//Constructor method
public FixturesDB(Context context) {
super(context, dbname, null, version);
this.mDB = getWritableDatabase();
}
/**
* This method is called providing the database does not exist
*/
@Override
public void onCreate(SQLiteDatabase db) {
String sql = "create table " + DATABASE_TABLE + " (" + KEY_ROW_ID + " integer primary key autoincrement , "
+ KEY_DATE + " text , " + KEY_TEAM + " text , " + KEY_COMPETITION + " text) ";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('04/02/2015', 'Bolton', 'FA Cup')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('07/02/2015', 'Everton', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('10/02/2015', 'Tottenham', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('19/02/2015', 'Besiktas', 'Europa League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('22/02/2015', 'Southampton', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('26/02/2015', 'Besiktas', 'Europa League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('01/03/2015', 'Man City', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('04/03/2015', 'Burnley', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('16/03/2015', 'Swansea', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('22/03/2015', 'Man Utd', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('04/04/2015', 'Arsenal', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('11/04/2015', 'Newcastle', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('18/04/2015', 'Hull', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('25/04/2015', 'West Brom', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('02/05/2015', 'QPR', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('09/05/2015', 'Chelsea', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('16/05/2015', 'Crystal Palace', 'Premier League')";
db.execSQL(sql);
sql = "insert into " + DATABASE_TABLE + " (" + KEY_DATE + "," + KEY_TEAM + "," + KEY_COMPETITION + ") "
+ " values ('24/05/2015', 'Stoke', 'Premier League')";
db.execSQL(sql);
}
/**
* Returns all the fixtures in the database
*/
public Cursor getFixtures() {
return mDB.query(DATABASE_TABLE, new String[] { KEY_ROW_ID, KEY_DATE, KEY_TEAM, KEY_COMPETITION }
, null, null, null, null, KEY_TEAM + " asc ");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + dbname);
onCreate(db);
}
}
Класс FixtureContentProvider:
public class FixtureContentProvider extends ContentProvider{
public static final String PROVIDER_NAME = "com.example.project.fixture";
public static final Uri CONTENT_URI = Uri.parse("content://" + PROVIDER_NAME + "/fixtures");
private static final int fixture = 1;
private static final UriMatcher uriMatcher ;
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI(PROVIDER_NAME, "fixtures", fixture);
}
FixturesDB mDB;
@Override
public boolean onCreate() {
mDB = new FixturesDB(getContext());
return true;
}
@Override
public String getType(Uri uri) {
return null;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
if(uriMatcher.match(uri)==fixture){
return mDB.getFixtures();
}else{
return null;
}
}
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
return null;
}
@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}
}
и класс Светильники:
public class Fixtures extends FragmentActivity implements LoaderCallbacks<Cursor> {
SimpleCursorAdapter mAdapter;
ListView listView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.activity_fixtures);
listView = (ListView) findViewById(R.id.listview);
mAdapter = new SimpleCursorAdapter(getBaseContext(), R.layout.listview_fixtures_layout, null,
new String[] {FixturesDB.KEY_DATE, FixturesDB.KEY_TEAM, FixturesDB.KEY_COMPETITION},
new int[] {R.id.date, R.id.team, R.id.competition}, 0);
listView.destroyDrawingCache();
listView.setVisibility(ListView.INVISIBLE);
listView.setVisibility(ListView.VISIBLE);
listView.setAdapter(mAdapter);
/**
* This creates a loader to populate the list view from the sqlite database
*/
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
Uri uri = FixtureContentProvider.CONTENT_URI;
return new CursorLoader(this, uri, null, null, null, null);
}
@Override
public void onLoadFinished(Loader<Cursor> arg0, Cursor arg1) {
mAdapter.swapCursor(arg1);
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
mAdapter.swapCursor(null);
}
}
Я предполагаю, что мне нужно обновить или закрыть базу данных, затем снова открыть или что-то в этом роде?
Заранее спасибо.
Редактировать Я ответил на свой вопрос, просто отключив приложение и переустановив его на устройство.
Noob момент.