SQLLITE Activity Fehler

  • 6 Antworten
  • Letztes Antwortdatum
R

roman85

Neues Mitglied
0
Huhu ich wollte in einer Liste Datensätze hinzufügen und mir dann in einer ListView anschauen. Wenn ich unten geposteten Code ausführe startet das Programm nicht. Ändere ich bei der Klasse von ListActivity zu Activity funktioniert es, aber dann kennt er natürlich setListAdapter nicht :-(

1.Klasse
Code:
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class Datenbanken extends [COLOR="red"]ListActivity[/COLOR]{

	private DatenbankManager mHelper;
	private SQLiteDatabase mDatenbank;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.daten_datenbanken);

		mHelper = new DatenbankManager(this);
	}

	protected void onPause() {
		super.onPause();
		mDatenbank.close();
		Toast.makeText(this, "Datenbank geschlossen", Toast.LENGTH_SHORT)
				.show();
	}

	protected void onResume() {
		super.onResume();
		mDatenbank = mHelper.getReadableDatabase();
		Toast.makeText(this, "Datenbank geöffnet", Toast.LENGTH_SHORT).show();
		ladeKlassen();

	}

	private void ladeKlassen() {
		Cursor klassencursor = mDatenbank.rawQuery(
				DatenbankManager.KLASSEN_SELECT_RAW, null);
		startManagingCursor(klassencursor);

		SimpleCursorAdapter klassenAdapter = new SimpleCursorAdapter(this,
				android.R.layout.simple_list_item_1, klassencursor,
				new String[] { "name" }, new int[] { android.R.id.text1 });
		[B][COLOR="Red"]setListAdapter(klassenAdapter);[/COLOR][/B]
	
	}

	public void onButtonClick(View view) {
		EditText editText = (EditText) findViewById(R.id.id_textfeld_datenbanken_einfuegen);
		String text = editText.getText().toString();

		ContentValues werte = new ContentValues();
		werte.put("name", text);
		mDatenbank.insert("klassen", null, werte);
		editText.setText("");
		 ladeKlassen();
	}
}


2.Klasse
Code:
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DatenbankManager extends SQLiteOpenHelper {

	private static final String DB_NAME = "sternenflotte.db";
	private static final int DB_VERSION = 1;
	private static final String KLASSEN_CREATE = "CREATE TABLE klassen ("
			+ "_id INTEGER PRIMARY KEY AUTOINCREMENT, " + "name TEXT NOT NULL"
			+ ")";
	private static final String KLASSEN_DROP = "DROP TABLE IF EXISTS klassen";

	public static final String KLASSEN_SELECT_RAW = "select _id, name FROM klassen";

	public DatenbankManager(Context context) {
		super(context, DB_NAME, null, DB_VERSION);
	}

	public void onCreate(SQLiteDatabase db) {
		db.execSQL(KLASSEN_CREATE);
	}

	public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
		db.execSQL(KLASSEN_DROP);
		onCreate(db);
	}
}

Fehlermeldung


Code:
07-09 21:07:05.515: E/AndroidRuntime(755): FATAL EXCEPTION: main
07-09 21:07:05.515: E/AndroidRuntime(755): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.last_trial/com.example.last_trial.Datenbanken}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2663)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2679)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.ActivityThread.access$2300(ActivityThread.java:125)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2033)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.os.Looper.loop(Looper.java:123)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.ActivityThread.main(ActivityThread.java:4627)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at java.lang.reflect.Method.invokeNative(Native Method)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at java.lang.reflect.Method.invoke(Method.java:521)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at dalvik.system.NativeStart.main(Native Method)
07-09 21:07:05.515: E/AndroidRuntime(755): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.ListActivity.onContentChanged(ListActivity.java:245)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:201)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.Activity.setContentView(Activity.java:1647)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at com.example.last_trial.Datenbanken.onCreate(Datenbanken.java:21)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
07-09 21:07:05.515: E/AndroidRuntime(755): 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2627)
07-09 21:07:05.515: E/AndroidRuntime(755): 	... 11 more
 
roman85 schrieb:
Code:
07-09 21:07:05.515: E/AndroidRuntime(755): Caused by: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'

Wie ist die ID deiner listview in deinem layout?

Du kannst auch ne Listview in einer normalen activity nutzen.
Musst dann eben die listview über findViewById finden und den Adapter darauf setzen.

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
mein einzigstes layout heißt: daten_datenbanken.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".Datenbanken" >

<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/einfuegen"
android:layout_centerHorizontal="true"
android:layout_marginTop="24dp" >
</ListView>

<EditText
android:id="@+id/id_textfeld_datenbanken_einfuegen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/einfuegen"
android:layout_alignParentTop="true"
android:layout_marginTop="29dp"
android:ems="10" >

<requestFocus />
</EditText>

<Button
android:id="@+id/einfuegen"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/list"
android:layout_below="@+id/id_textfeld_datenbanken_einfuegen"
android:layout_marginTop="26dp"
android:text="einfuegen" />

<TextView
android:id="@+id/txtMake"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/id_textfeld_datenbanken_einfuegen"
android:layout_marginRight="20dp"
android:text="Datenbanken"
android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>
 
Code:
import android.app.Activity;
import android.app.ListActivity;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.v4.widget.SimpleCursorAdapter;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class Datenbanken extends [COLOR="red"]Activity[/COLOR]{

private DatenbankManager mHelper;
private SQLiteDatabase mDatenbank;
[COLOR="red"]private ListView mList;[/COLOR]


protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.daten_datenbanken);

[COLOR="red"]mList = (ListView) findViewById(R.id.list);[/COLOR]

mHelper = new DatenbankManager(this);
}

protected void onPause() {
super.onPause();
mDatenbank.close();
Toast.makeText(this, "Datenbank geschlossen", Toast.LENGTH_SHORT)
.show();
}

protected void onResume() {
super.onResume();
mDatenbank = mHelper.getReadableDatabase();
Toast.makeText(this, "Datenbank geöffnet", Toast.LENGTH_SHORT).show();
ladeKlassen();

}

private void ladeKlassen() {
Cursor klassencursor = mDatenbank.rawQuery(
DatenbankManager.KLASSEN_SELECT_RAW, null);
startManagingCursor(klassencursor);

SimpleCursorAdapter klassenAdapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, klassencursor,
new String[] { "name" }, new int[] { android.R.id.text1 });

[COLOR="Red"]mList.setAdapter(klassenAdapter);[/COLOR]

}

public void onButtonClick(View view) {
EditText editText = (EditText) findViewById(R.id.id_textfeld_datenbanken_einfuegen);
String text = editText.getText().toString();

ContentValues werte = new ContentValues();
werte.put("name", text);
mDatenbank.insert("klassen", null, werte);
editText.setText("");
 ladeKlassen();
}
}

So in etwa sollte das eigentlich gehen.

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
ich hätte es sehr gerne bejaht, aber dem ist leider nicht so.
Es startet zwar, aber bei den Klick auf den Button werden die Datensätze(die Eingaben im Textfeld) nicht in der Ansicht hinzugefügt :-(
 
Dann musst du die Datenbank mit getWritableDatabase initialisieren. Sonst kannst du die zwar auslesen(funktioniert das denn?), aber keine neuen Daten hinzufügen

Gesendet von meinem Galaxy Nexus mit der Android-Hilfe.de App
 
Problem gelöst, lag an einer dummen Kleinigkeit :crying::crying::crying:

Ein ganz großes DANKE an Vacutainer !!!!!!
 
Zurück
Oben Unten