android.widget.ListView нельзя преобразовать в android.widget.TextView, используя импортированную базу данных SQLite. - PullRequest
0 голосов
/ 29 марта 2012

Я импортирую базу данных на заказ в браузере баз данных 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 с каждой кликабельной записью, которая запишет эту кликаемую запись в другую таблицу в БД.

1 Ответ

0 голосов
/ 28 апреля 2012

попробуйте выбрать * из таблицы, это должно помочь в противном случае отправить обратно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...