0

Моя проблема заключается в том, что я не знаю, как точно я могу отображать данные из базы данных.Отображение данных в виде списка и получение ошибки NullPointerException

Вот моя активность DatabaseHelper (я отрезал не необходимый код), который открывает/закрывает базу данных и создает таблицы.

final static String PN_TABLE = "Tablica_Poniedzialek"; 
    static final String PN_KEY_ID = "_id"; 
    final static String PN_KEY_TYPE_OF_SESSION ="type_of_session"; 
    final static String PN_KEY_START_TIME ="start_time"; 
    final static String PN_KEY_END_TIME ="end_time"; 
    final static String PN_KEY_NAME ="name";       
    final static String PN_KEY_ROOM ="room"; 

Создание и добавление данных в базу данных прекрасно работает. Проблема в том, что я не знаю, как именно я должен отображать данные, вставленные в базу данных. Я пробовал использовать курсоры и адаптер списков, но кажется, что я что-то испортил, так как приложение вынуждено закрывать каждый раз, когда я запускаю его в эмуляторе.

Это моя деятельность, которая отвечает за получение данных из базы данных, а затем ее отображение. Я не знаю, как на самом деле я могу отображать данные в виде списка. Я не уверен, какой метод будет лучше, тот, который создает список (я считаю, что он есть) или тот, который просто извлекает данные из базы данных. Но, допустим, первый из них правильный, тогда вопрос в том, как я могу фактически отобразить все данные?

package com.projekt; 


import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.app.ListActivity; 
import android.content.Intent; 
import android.database.Cursor; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 


public class PoniedzialekActivity extends ListActivity implements OnClickListener{ 

    private Button butPnAdd; 
    private DatabaseHelper dbhelper; 
    private SQLiteDatabase db; 
    Cursor cursor; 

    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_poniedzialek); 

     butPnAdd = (Button) findViewById(R.id.butPnAdd); 
     butPnAdd.setOnClickListener(this); 

     List<Poniedzialek> lista_poniedzialek = getAllPnSession(); 
     this.setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, lista_poniedzialek)); 



    @Override 
    public void onClick(View v) { 
     if(v.getId()==R.id.butPnAdd){ 
     Intent i = new Intent(PoniedzialekActivity.this,dodawaniePoniedzialek.class); 
     startActivity(i); 
     } 
    } 
    public List<Poniedzialek> getAllPnSession() { 
     List<Poniedzialek> pnsessionList = new ArrayList<Poniedzialek>(); 
     // Wybierz cale Query 
     String selectQuery = "SELECT * FROM " + DatabaseHelper.PN_TABLE; 
     dbhelper.getWritableDatabase(); 
     Cursor cursor = db.rawQuery(selectQuery, null); 
     // petla po wszystkich rzedach & dodawanie ich do listy 
     if (cursor.moveToFirst()) { 
      do { 
       Poniedzialek pn = new Poniedzialek(); 

       pn.setID(Integer.parseInt(cursor.getString(0))); 
       pn.setTypeOfSession(cursor.getString(1)); 
       pn.setName(cursor.getString(2)); 
       pn.setStartTime(cursor.getString(3)); 
       pn.setEndTime(cursor.getString(4)); 
       pn.setRoom(cursor.getString(5)); 

       // Dodawanie sesji do listy 
       pnsessionList.add(pn); 
      } while (cursor.moveToNext()); 
     } 
     cursor.close(); 
     // return contact list 
     return pnsessionList; 
    } 
    public Cursor fetchPn() { 
     SQLiteDatabase db = dbhelper.getWritableDatabase(); 
     return db.query(DatabaseHelper.PN_TABLE, new String[] {DatabaseHelper.PN_KEY_TYPE_OF_SESSION, DatabaseHelper.PN_KEY_START_TIME, 
       DatabaseHelper.PN_KEY_END_TIME, DatabaseHelper.PN_KEY_NAME, DatabaseHelper.PN_KEY_ROOM}, null, null, null, null, null); 
    } 

} // end PoniedzialekActivity 

Это layout_poniedzialek:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/butPnAdd" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/add_pn" 
     /> 
    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/tab1" 
     /> 



    <ListView 
     android:id="@+id/pnListView" 
     android:layout_width="304dp" 
     android:layout_height="380dp" 
     android:layout_gravity="center_horizontal" > 

    </ListView> 

</LinearLayout> 

E D I T Сейчас я получаю сообщение об ошибке: NullPointerException. Это то, что я реализовал в poniedzialekActivity (Пожалуйста, обратите внимание, что DatabaseHelper это имя класса, в котором я храню открывать/закрывать и статическую конечную строку атрибутов - здесь я создаю 5 таблеток)

PoniedzialekActivity класс:

public class PoniedzialekActivity extends ListActivity implements OnClickListener{ 

    private Button butPnAdd; 
    private DatabaseHelper dbhelper; 
    private SQLiteDatabase db; 
    Cursor c; 

    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_poniedzialek); 

     butPnAdd = (Button) findViewById(R.id.butPnAdd); 
     butPnAdd.setOnClickListener(this); 


     dbhelper = new DatabaseHelper(this); 
     dbhelper.open(); 
     c = dbhelper.fetchPn(); 
     String[] columns = new String[] { DatabaseHelper.PN_KEY_TYPE_OF_SESSION, DatabaseHelper.PN_KEY_START_TIME, DatabaseHelper.PN_KEY_END_TIME, 
       DatabaseHelper.PN_KEY_NAME, DatabaseHelper.PN_KEY_ROOM}; 
     int[] to = new int[] { R.id.textSession, R.id.textStartTime, R.id.textEndTime, R.id.textName, R.id.textRoom }; 
     new SimpleCursorAdapter(PoniedzialekActivity.this, R.layout.entry, c, columns, to); 
     ListView list = getListView(); 
     list.setAdapter(new SimpleCursorAdapter(PoniedzialekActivity.this, R.layout.entry, c, columns, to)); 

    } 
    @Override 
    public void onClick(View v) { 
     if(v.getId()==R.id.butPnAdd){ 
     Intent i = new Intent(PoniedzialekActivity.this,dodawaniePoniedzialek.class); 
     startActivity(i); 
     } 
    } 
} 

DatabaseHelper.class

public class DatabaseHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "database.db"; 
    private static final int DATABASE_VERSION = 1; 
    public static final String TAG = "ProjectDatabase"; 

    static final String PN_TABLE = "Tablica_Poniedzialek"; 
    static final String PN_KEY_ID = "_id"; 
    static final String PN_KEY_TYPE_OF_SESSION ="type_of_session"; 
    static final String PN_KEY_START_TIME ="start_time"; 
    static final String PN_KEY_END_TIME ="end_time"; 
    static final String PN_KEY_NAME ="name";       
    static final String PN_KEY_ROOM ="room"; 

    static final String WT_TABLE = "Tablica_Wtorek"; 
    static final String WT_KEY_ID = "_id"; 
    static final String WT_KEY_TYPE_OF_SESSION ="type_of_session"; 
    static final String WT_KEY_START_TIME ="start_time"; 
    static final String WT_KEY_END_TIME ="end_time"; 
    static final String WT_KEY_NAME ="name"; 
    static final String WT_KEY_ROOM ="room"; 

    static final String SR_TABLE = "Tablica_Sroda"; 
    static final String SR_KEY_ID = "_id"; 
    static final String SR_KEY_TYPE_OF_SESSION ="type_of_session"; 
    static final String SR_KEY_START_TIME ="start_time"; 
    static final String SR_KEY_END_TIME ="end_time"; 
    static final String SR_KEY_NAME ="name"; 
    static final String SR_KEY_ROOM ="room"; 

    static final String CZ_TABLE = "Tablica_Czwartek"; 
    static final String CZ_KEY_ID = "_id"; 
    static final String CZ_KEY_TYPE_OF_SESSION ="type_of_session"; 
    static final String CZ_KEY_START_TIME ="start_time"; 
    static final String CZ_KEY_END_TIME ="end_time"; 
    static final String CZ_KEY_NAME ="name"; 
    static final String CZ_KEY_ROOM ="room"; 

    static final String PT_TABLE = "Tablica_Piatek"; 
    static final String PT_KEY_ID = "_id"; 
    static final String PT_KEY_TYPE_OF_SESSION ="type_of_session"; 
    static final String PT_KEY_START_TIME ="start_time"; 
    static final String PT_KEY_END_TIME ="end_time"; 
    static final String PT_KEY_NAME ="name"; 
    static final String PT_KEY_ROOM ="room"; 

    public DatabaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DATABASE_VERSION); 
    }   
    private DatabaseHelper dbhelper; 
    private SQLiteDatabase db; 

    @Override 
    public void onCreate(SQLiteDatabase db) { 

     String pn_sql = "CREATE TABLE " + PN_TABLE + 
         "(" + PN_KEY_ID + " integer primary key autoincrement, " + 
         PN_KEY_TYPE_OF_SESSION + " text, " + 
         PN_KEY_NAME + " text, " + 
         PN_KEY_START_TIME + " text, " + 
         PN_KEY_END_TIME + " text, " + 
         PN_KEY_ROOM + " text);"; 
     String wt_sql = "CREATE TABLE " + WT_TABLE + 
         "(" + WT_KEY_ID + " integer primary key autoincrement, " + 
         WT_KEY_TYPE_OF_SESSION + " text, " + 
         WT_KEY_NAME + " text, " + 
         WT_KEY_START_TIME + " text, " + 
         WT_KEY_END_TIME + " text, " + 
         WT_KEY_ROOM + " text);"; 
     String sr_sql = "CREATE TABLE " + SR_TABLE + 
         "(" + SR_KEY_ID + " integer primary key autoincrement, " + 
         SR_KEY_TYPE_OF_SESSION + " text, " + 
         SR_KEY_NAME + " text, " + 
         SR_KEY_START_TIME + " text, " + 
         SR_KEY_END_TIME + " text, " + 
         SR_KEY_ROOM + " text);"; 
     String cz_sql = "CREATE TABLE " + CZ_TABLE + 
         "(" + CZ_KEY_ID + " integer primary key autoincrement, " + 
         CZ_KEY_TYPE_OF_SESSION + " text, " + 
         CZ_KEY_NAME + " text, " + 
         CZ_KEY_START_TIME + " text, " + 
         CZ_KEY_END_TIME + " text, " + 
         CZ_KEY_ROOM + " text);"; 
     String pt_sql = "CREATE TABLE " + PT_TABLE + 
         "(" + PT_KEY_ID + " integer primary key autoincrement, " + 
         PT_KEY_TYPE_OF_SESSION + " text, " + 
         PT_KEY_NAME + " text, " + 
         PT_KEY_START_TIME + " text, " + 
         PT_KEY_END_TIME + " text, " + 
         PT_KEY_ROOM + " text);"; 

     db.execSQL(pn_sql); 
     db.execSQL(wt_sql); 
     db.execSQL(sr_sql); 
     db.execSQL(cz_sql); 
     db.execSQL(pt_sql); 
    } 
    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.w("Projekt", "aktualizacja z wersji " + oldVersion 
       + " do wersji " + newVersion + " (stare dane ulegna usunieciu) "); 
       db.execSQL("DROP TABLE IF EXISTS" + PN_TABLE); 
       db.execSQL("DROP TABLE IF EXISTS" + WT_TABLE); 
       db.execSQL("DROP TABLE IF EXISTS" + SR_TABLE); 
       db.execSQL("DROP TABLE IF EXISTS" + CZ_TABLE); 
       db.execSQL("DROP TABLE IF EXISTS" + PT_TABLE); 
     onCreate(db); 
    } 
    public void open() 
    { 
      dbhelper.open(); 
    } 
    public void close() 
     { 
      dbhelper.close(); 
     } 
    public Cursor fetchPn() { 
     return db.query(PN_TABLE, new String[] {PN_KEY_TYPE_OF_SESSION, PN_KEY_START_TIME, 
       PN_KEY_END_TIME, PN_KEY_NAME, PN_KEY_ROOM}, null, null, null, null, null); 
    } 
} 

Это мой MainActivity класс, держащий TabHost:

public class MainActivity extends TabActivity { 
    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     //--- TABHOST ---// 
     Resources res = getResources(); // Resource object to get Drawables 
     TabHost tabHost = getTabHost(); // The activity TabHost 
     TabHost.TabSpec spec; // Resusable TabSpec for each tab 
     Intent intent; // Reusable Intent for each tab 

     // Create an Intent to launch an Activity for the tab (to be reused) 
     intent = new Intent().setClass(this, PoniedzialekActivity.class); 
     // Initialize a TabSpec for each tab and add it to the TabHost 
     spec = tabHost.newTabSpec("Pn").setIndicator("Pn", 
          res.getDrawable(R.drawable.ic_launcher)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     // Do the same for the other tabs 
     intent = new Intent().setClass(this, WtorekActivity.class); 
     spec = tabHost.newTabSpec("Wt").setIndicator("Wt", 
          res.getDrawable(R.drawable.ic_launcher)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, SrodaActivity.class); 
     spec = tabHost.newTabSpec("Sr").setIndicator("Sr", 
          res.getDrawable(R.drawable.ic_launcher)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, CzwartekActivity.class); 
     spec = tabHost.newTabSpec("Cz").setIndicator("Cz", 
          res.getDrawable(R.drawable.ic_launcher)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     intent = new Intent().setClass(this, PiatekActivity.class); 
     spec = tabHost.newTabSpec("Pt").setIndicator("Pt", 
          res.getDrawable(R.drawable.ic_launcher)) 
         .setContent(intent); 
     tabHost.addTab(spec); 

     tabHost.setCurrentTab(1); 
     //--- END OF TABHOST ---// 

    } 
} 

ответ

0

setListAdapter() не определен для Activity ... так что я не знаю, как ваш код даже компилирует.

Вам необходимо раздуть макет, найдите ListView, используя findViewById, а затем установите его адаптер.

ListView lv = (ListView) findViewById(R.id.pnListView); 
lv.setAdapter(...); 
+0

Отредактировано: Я изменил расширение, но забыл опубликовать его – user1420709

+0

я уже сделал, что (я должен был изменить свой пост, любые изменения были размещены ниже ** Редактировать ** – user1420709

+0

Какая линия строка 34 (это в вашем 'onCreate')? Это строка, которая дает вам« NullPointerException » –

Смежные вопросы