Моя проблема заключается в том, что я не знаю, как точно я могу отображать данные из базы данных.Отображение данных в виде списка и получение ошибки 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 ---//
}
}
Отредактировано: Я изменил расширение, но забыл опубликовать его – user1420709
я уже сделал, что (я должен был изменить свой пост, любые изменения были размещены ниже ** Редактировать ** – user1420709
Какая линия строка 34 (это в вашем 'onCreate')? Это строка, которая дает вам« NullPointerException » –