Android SQLite: ListView не отображает элемент в базе данных - PullRequest
1 голос
/ 01 марта 2012

Я создал базу данных с помощью своей собственной программы и проверил SQLite Database Browser, чтобы убедиться, что в этой базе данных есть данные. После этого я поместил некоторый код в onCreate (код ниже), чтобы показать эти данные в ListView

В приведенных ниже данных я уверен, что каждый компонент (ListView и CursorAdapter) работает правильно (потому что я тестировал каждый компонент перед тем, как собрать его вместе), и SQLiteOpenHandler тоже работает правильно, потому что я могу использовать этот класс для записи данных в базу данных. Но когда я вставил SQLiteOpenHandler, что-то было не так. Я думаю, что я пропустил какую-то строку, чтобы показать данные, а не неправильно в коде.

Вот мой код:

 public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);  //in this `main layout` I have put `ListView` in

            //DatabaseHelper: a class extends from `SQLiteOpenHandler`
            databaseHelper = new DatabaseHelper(this);      

            ListView listView = (ListView) findViewById(R.id.times_list); //layout for `ListView`
            //TimeTrackerAdapter: a class extends from `CursorAdapter` 
            timeTrackerAdapter = new TimeTrackerAdapter(this, databaseHelper.getAllTimeRecord());
//getallTimeRecord() method: return a cursor of whole data in database
            listView.setAdapter(timeTrackerAdapter);     
        }

Пожалуйста, дайте мне помощь.

спасибо:)

@ Edit: мой TimeTrackerAdapter класс, простирается от CursorAdapter

public class TimeTrackerAdapter  extends CursorAdapter{

    public TimeTrackerAdapter(Context context, Cursor cursor){  
        super(context, cursor);
    }   

    @Override
    public void bindView(View view, Context context, Cursor cursor) {
        TextView nameTextView = (TextView) view.findViewById(R.id.time_view);  
        //time_view: just a layout to display "time"
        nameTextView.setText(cursor.getString(1));      
        TextView valueTextView = (TextView) view.findViewById(R.id.notes_view);
        valueTextView.setText(cursor.getString(2));
        //notes_view: just a layout to display "notes"
    }

    @Override
    public View newView(Context context, Cursor cursor, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        View view = inflater.inflate(R.layout.time_list_item, parent, false);
        return view;
    }
}

@ Редактировать 2: а вот мой метод getAllTimeRecord()

public Cursor getAllTimeRecord(){
        return database.rawQuery("select * from "+TABLE_NAME, null);

    } 

Если с этим методом что-то не так, я думаю, SQLite Query. Но я не уверен, как это проверить :( (при запуске Logcat не принимает ошибку для этого запроса).

1 Ответ

0 голосов
/ 08 января 2014

Вы должны оставить свою часть TimeTrackerAdapter ниже


public int getCount() {
    return times.size();
}

public Object getItem(int index) {
    return getItem(index);
}

public long getItemId(int index) {
    return index;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...