Я импортирую базу данных на заказ в браузере баз данных SQLite.Он состоит из 1 БД с 3 таблицами.
Сначала у меня возникали ошибки, связанные с тем, что таблицы и столбцы не существовали, когда они явно существуют, поэтому я зашел в файловый менеджер DDMS, удалил базу данных и перезапустил ее заново.моя программаТем не менее, теперь я получаю новую ошибку android.widget.ListView не может быть приведен к android.widget.TextView
вот код:
public class SearchbyAlpha extends Activity {
private IngredientHelper dbIngredientHelper = null;
private Cursor ourCursor = null;
private IngredientAdapter adapter=null;
public void onCreate(Bundle savedInstanceState){
try{
super.onCreate(savedInstanceState);
setContentView(R.layout.viewportingredients);
ListView myListView = (ListView)findViewById(R.id.myListView);
dbIngredientHelper = new IngredientHelper(this);
dbIngredientHelper.createDatabase();
dbIngredientHelper.openDataBase();
ourCursor = dbIngredientHelper.getCursor();
startManagingCursor(ourCursor);
adapter=new IngredientAdapter(ourCursor);
myListView.setAdapter(adapter);
}
catch (Exception e)
{
Log.e("ERROR", "ERROR IN CODE: " + e.toString());
e.printStackTrace();
}
}
class IngredientAdapter extends CursorAdapter{
IngredientAdapter(Cursor c){
super(SearchbyAlpha.this, c);
}
@Override
public void bindView(View row, Context ctxt, Cursor c){
IngredientHolder holder=(IngredientHolder)row.getTag();
holder.populateFrom(c, dbIngredientHelper);
}
@Override
public View newView(Context ctxt, Cursor c, ViewGroup parent) {
LayoutInflater inflater=getLayoutInflater();
View row=inflater.inflate(R.layout.viewportingredients, parent, false);
IngredientHolder holder=new IngredientHolder(row);
row.setTag(holder);
return(row);
}
}
static class IngredientHolder{
private TextView name=null;
IngredientHolder(View row){
name = (TextView) row.findViewById(R.id.myListView);
}
void populateFrom(Cursor c, IngredientHelper r){
name.setText(r.getName(c));
}
}
}
Вот мой помощник БД:
public SQLiteDatabase dbSqlite;
private final Context myContext;
public IngredientHelper(Context context) {
super(context, DATABASE_NAME, null, SCHEMA_VERSION);
this.myContext = context;
}
@Override
public void onCreate(SQLiteDatabase db){
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
public void createDatabase(){
createDB();
}
private void createDB(){
boolean dbExist = DBExists();
if (!dbExist){
this.getReadableDatabase();
copyDBFromResource();
}
}
private boolean DBExists() {
SQLiteDatabase db = null;
try {
String databasePath = DATABASE_PATH + DATABASE_NAME;
db = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.OPEN_READWRITE);
db.setLocale(Locale.getDefault());
db.setLockingEnabled(true);
db.setVersion(1);
} catch (SQLiteException e){
Log.e("SqlHelper", "database not found");
}
if (db != null){
db.close();
}
return db != null ? true : false;
}
private void copyDBFromResource(){
InputStream inputStream = null;
OutputStream outStream = null;
String dbFilePath = DATABASE_PATH + DATABASE_NAME;
try{
inputStream = myContext.getAssets().open(DATABASE_NAME);
outStream = new FileOutputStream(dbFilePath);
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outStream.write(buffer, 0, length);
}
outStream.flush();
outStream.close();
inputStream.close();
} catch (IOException e){
throw new Error("Problem copying database from resource file.");
}
}
public void openDataBase() throws SQLException {
String myPath = DATABASE_PATH + DATABASE_NAME;
dbSqlite = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public synchronized void close(){
if(dbSqlite != null)
{
dbSqlite.close();
}
super.close();
}
public Cursor getCursor(){
SQLiteQueryBuilder queryBuilder = new SQLiteQueryBuilder();
queryBuilder.setTables(TABLE_NAME);
String[] asColumnsToReturn = new String[] { COLUMN_ID, COLUMN_TITLE, COLUMN_TITLE2};
Cursor mCursor = queryBuilder.query(dbSqlite, asColumnsToReturn, null, null, null, null, COLUMN_TITLE);
return mCursor;
}
public String getName(Cursor c){
return(c.getString(1));
}
}
Я пробовал комбинации ListViews и TextViews в моем файле "viewportingradients.xml", но безрезультатно.Я подозреваю, что ошибка заключается в следующем:
static class IngredientHolder{
private TextView name=null;
IngredientHolder(View row){
name = (TextView) row.findViewById(R.id.myListView);
}
void populateFrom(Cursor c, IngredientHelper r){
name.setText(r.getName(c));
}
}
но, поскольку я новичок в Android, я действительно не уверен, как это исправить.Заранее спасибо.
РЕДАКТИРОВАТЬ: Я намерен поместить эту таблицу БД в ListView с каждой кликабельной записью, которая запишет эту кликаемую запись в другую таблицу в БД.