2016-01-14 7 views
1

Я сделал некоторые изменения в моем коде, и он работает, но я не получил соответствующий вывод. Я создаю метод.извлекает данные из файла dbHandler.java, но не может показать его в listview?

public void fetchData() { 
     dbHandler = new CourseDbHandler(this,null,null,1); 
     List<CreateCourse> course_data = dbHandler.getdata(); 
     String[] data = new String[course_data.size()]; 
     int i=0; 
     for(CreateCourse co : course_data) 
     { 
      data[i] = co.getCourseSelected(); 
      i++; 
     } 
     courseList = (ListView) findViewById(R.id.CourselistView); 
     courseAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, data); 
     courseList.setAdapter(courseAdapter); 
     courseAdapter.notifyDataSetChanged(); 
    } 

в этом методе я использовал метод dbHandler.getdata, который является следующим

public List<CreateCourse> getdata() throws NullPointerException { 
    String dbString = ""; 
    String course; 
    String sec; 

    List<CreateCourse> list = new ArrayList<>(); 

    SQLiteDatabase db = getWritableDatabase(); 
    String query = "SELECT * FROM " + TABLE_COURSE +";"; 
    Cursor c = db.rawQuery(query,null); 
    c.moveToFirst(); 

    if(c.equals(null)){ 
     System.out.println("NO DATA"); 
     return null; 
    } 
    else { 
     do { 
      course = c.getString(1); 
      sec = c.getString(2); 
      dbString = course+" "+sec; 
      CreateCourse co = new CreateCourse(); 
      co.setCourseSelected(dbString); 
      list.add(new CreateCourse(c.getString(1), c.getString(2))); 
     }while (c.moveToNext()); 
    } 
    db.close(); 
    return list; 
} 

Они являются геттер и сеттер метод

public void setCourseSelected(String courSelected) { 
     courseSelected = courSelected; 
    } 

    public String getCourseSelected() { 
     System.out.println(courseSelected); 
     return courseSelected; 
    } 

Это дает ошибку , к сожалению, приложение остановлен.

+0

Вы перезаписать 'dbString' в' while' цикла. Вы должны сохранять значения в 'List' или массиве для хранения нескольких записей db. –

ответ

0

Я изменил весь код и решил проблему в приведенном выше коде.

protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_create_course); 
     dbHandler = new CourseDbHandler(this, null, null, 1); 
     Cursor c = dbHandler.getData(); 
     c.moveToFirst(); 
     // System.out.println("Select"); 
     if(c.equals(null)){ 
      System.out.println("NO DATA"); 
      } 
     else { 
      if(c.moveToFirst()) { 
       do { 
        dbString=null; 
        course = c.getString(1); 
        sec = c.getString(2); 
        dbString = course + " " + sec; 
        courseItem.add(dbString); 
       } while (c.moveToNext()); 
      } 
     } 
     courseList = (ListView) findViewById(R.id.CourselistView); 
     courseAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, courseItem); 
     courseList.setAdapter(courseAdapter); 
     courseAdapter.notifyDataSetChanged(); 
} 

Спасибо за вашу помощь ..

0

Создайте класс с данными:

public class Course { 
public String id; 
public String course; 
public String sec; 

public Course (String id, String course, String sec) { 
this.id = id; 
this.course = course; 
this.sec = sec; 
} 

Затем измените метод для получения списка ваших данных:

public List<Course> getdata() throws NullPointerException { 
     List<Course> list = new ArrayList<>(); 

     SQLiteDatabase db = getWritableDatabase(); 
     String query = "SELECT * FROM " + TABLE_COURSE +";"; 
     Cursor c = db.rawQuery(query,null); 
     c.moveToFirst(); 

     if(c.equals(null)){ 
      System.out.println("NO DATA"); 
     return null; 
     } 
     else { 
      do { 
       list.add(new Course(c.getString(0), c.getString(1), c.getString(2))); 
      }while (c.moveToNext()); 
     } 
     db.close(); 
     return list; 
    } 

Затем вы можете использовать этот список с ArrayAdapter для отображения данных в ListView ,