WIe kann man das machen???

  • Hallo ich hätte eine Frage wie man das folgende programmieren könnte.


    Meine App beinhaltet bis jetzt die Klassen:
    -MainActivity(hier kann man der Datenbank Einträge hinzufügen und löschen)
    -DataSource(für eine SQLite Datenbank)
    -MySQLiteHelper(für eine SQLite Datenbank, hat SQLiteOpenHelper geerbt)
    -eine Klasse die die neuen Einträge zwischenspeichert(die Klasse mit getID und setID)


    Da ich bis jetzt als Einträge immer nur Zufallszahlen, die von einem Button aufgerufen wurden, hatte, hat alles funktioniert. Doch jetzt will ich, das wenn ich auf "Eintrag hinzufügen" drücke, sich eine neue Activity öffnet mit einem EditText, wo man den neuen Eintrag eingibt.
    Doch leider habe ich das noch nicht hinbekommen. Nun wollte ich fragen wie ich das machen kann.
    Ich poste noch die Klassen.


    Die MainActivity:

    Java
    package de.marcoa.writeitdown;
    import android.app.ListActivity;
    import android.content.Intent;import android.os.Bundle;
    import java.util.List;
    
    
    import android.view.View;import android.widget.ArrayAdapter;
    
    
    public class NeuesGebiet extends ListActivity {	public static GebieteDataSource datasource;	public String name;		@Override	public void onCreate(Bundle savedInstanceState){		super.onCreate(savedInstanceState);		setContentView(R.layout.activity_main);				datasource = new GebieteDataSource(this);		datasource.open();				List<Gebiet> values = datasource.getAllGebiete();				ArrayAdapter<Gebiet> adapter = new ArrayAdapter<Gebiet>(this, 				android.R.layout.simple_list_item_1, values);		setListAdapter(adapter);			}		@SuppressWarnings("unchecked")	public void onClick(View view){		ArrayAdapter<Gebiet> adapter = (ArrayAdapter<Gebiet>) getListAdapter();		Gebiet gebiet = null;				switch(view.getId()){		case R.id.add:			Intent Weiterleitung = new Intent("android.intent.action.GEBADD");			startActivity(Weiterleitung);			break;		case R.id.deleteF:			if(getListAdapter().getCount() > 0) {		        gebiet = (Gebiet) getListAdapter().getItem(0);		        datasource.deleteGebiet(gebiet);		        adapter.remove(gebiet);		      }			break;		}		adapter.notifyDataSetChanged();	}		@Override	protected void onResume(){		datasource.open();		super.onResume();	}		@Override	protected void onPause(){		datasource.close();		super.onPause();	}	}



    DataSource:

    Java
    package de.marcoa.writeitdown;
    import java.util.ArrayList;import java.util.List;
    import android.content.ContentValues;import android.content.Context;import android.database.Cursor;import android.database.SQLException;import android.database.sqlite.SQLiteDatabase;
    public class GebieteDataSource {		public SQLiteDatabase database;	private MySQLiteHelper dbHelper;	private String[] allColumns = {MySQLiteHelper.COLUMN_ID, MySQLiteHelper.COLUMN_GEBIET};		public GebieteDataSource(Context context){		dbHelper = new MySQLiteHelper(context);			}		public void open() throws SQLException{		database = dbHelper.getWritableDatabase();			}		public void close(){		dbHelper.close(); 	}		public Gebiet createGebiet(String name){		ContentValues values = new ContentValues();		values.put(MySQLiteHelper.COLUMN_GEBIET, name);				long insertId = database.insert(MySQLiteHelper.TABLE_GEBIETE, null, values);				Cursor cursor = database.query(MySQLiteHelper.TABLE_GEBIETE,				allColumns,MySQLiteHelper.COLUMN_ID +"= "+ insertId, null,				null,null,null); 		cursor.moveToFirst();		Gebiet newGebiet = cursorToGebiet(cursor);		cursor.close();		return newGebiet;			}		public void deleteGebiet(Gebiet gebiet){		long id = gebiet.getId();		System.out.println("Comment deleted with id:" + id);		database.delete(MySQLiteHelper.TABLE_GEBIETE, MySQLiteHelper.COLUMN_ID +"="+id,null);		}		public List<Gebiet> getAllGebiete(){		List<Gebiet> gebiete = new ArrayList<Gebiet>();		Cursor cursor = database.query(MySQLiteHelper.TABLE_GEBIETE,				allColumns, null,null,null,null,null);				cursor.moveToNext();		while(!cursor.isAfterLast()){			Gebiet gebiet = cursorToGebiet(cursor);			gebiete.add(gebiet);			cursor.moveToNext();		}				cursor.close();		return gebiete;	}		private Gebiet cursorToGebiet(Cursor cursor){		Gebiet gebiet = new Gebiet();		gebiet.setId(cursor.getLong(0));		gebiet.setName(cursor.getString(1));		return gebiet;	}
    }



    MySQLiteHelper:

    Code
    package de.marcoa.writeitdown;
    import android.content.Context;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteDatabase;import android.util.Log;
    
    
    public class MySQLiteHelper extends SQLiteOpenHelper {	public static final String TABLE_GEBIETE = "gebiete";	public static final String COLUMN_ID = "_id";	public static final String COLUMN_GEBIET = "gebiet";		private static final String DATABASE_NAME = "gebiete.db";	private static final int DATABASE_VERSION = 1;
    		private static final String DATABASE_CREATE = "create table "			+ TABLE_GEBIETE +"(" + COLUMN_ID			+" integer primary key autoincrement, " +COLUMN_GEBIET			+" text not null);";				public MySQLiteHelper(Context context){		super(context, DATABASE_NAME, null, DATABASE_VERSION);		}	@Override	public void onCreate(SQLiteDatabase database){		database.execSQL(DATABASE_CREATE);			}		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){		Log.w(MySQLiteHelper.class.getName(),				"Upgrading database from version"+ oldVersion+ "to"				+newVersion+",which will destroy all old data");		db.execSQL("DROP TABLE IF EXISTS"+ TABLE_GEBIETE);		onCreate(db);			}}



    Und hier noch mein Lösungsvorschlag, der leider nicht funktioniert:

    Java
    package de.marcoa.writeitdown;
    
    
    import android.app.ListActivity;import android.content.Intent;import android.os.Bundle;import android.view.View;import android.widget.ArrayAdapter;import android.widget.Button;import android.widget.EditText;import java.util.List;
    
    
    public class GebAdd extends ListActivity{	public String name;	
    	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		setContentView(R.layout.neuesgebiet);				NeuesGebiet.datasource.open();		EditText ng = (EditText) findViewById(R.id.ng);		name = ng.getText().toString();		Button ok = (Button) findViewById(R.id.ok);		ok.setOnClickListener(new View.OnClickListener() {									public void onClick(View v) {				@SuppressWarnings("unchecked")				ArrayAdapter<Gebiet> adapter = (ArrayAdapter<Gebiet>) getListAdapter();				Gebiet gebiet = null;				gebiet = NeuesGebiet.datasource.createGebiet(name);				adapter.add(gebiet);				Intent Weiterleitung = new Intent("android.intent.action.MAINACT");				startActivity(Weiterleitung);				adapter.notifyDataSetChanged();								}		});	}	}



    Schon mal Vielen Dank.

  • Schade, dass die Editoransicht die Formatierung des Quelltextes immer so zerreißt…


    Irgendwie sieht es für mich so aus, als bautest Du ein Tutorial nach und wüsstest nicht, wie man Fehler im Code aufspürt.


    Wie genau meinst Du denn 'Lösungsvorschlag, der leider nicht klappt'?


    Ich stell mir bei solch detaillierter Fehlerbeschreibung immer vor, wie jemand mit seinem Auto zur KFZ Werkstatt fährt, aus dem tadellos aussehenden Wagen steigt, dem Mechaniker den Schlüssel und die Papiere zuwirft und im Gehen 'Ist kaputt.' sagt. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Erstmal danke für die Antwort.


    Mein Lösungsvorschlag ist falsch, da wenn ich die App ausführe immer ein Fehler kommt wenn ich auf die neue Activity zugreifen will.


    Und ich wollte nicht wissen was daran falsch ist, sondern ich würde gerne wissen
    wie ich die neue Klasse aufbauen muss und was ich beachten muss.


    LG Gamerac

  • Und die Fehlermeldung aus dem LogCat lautet wie?


    Das Tutorial von Lars Vogel ist im Allgemeinen gut und funktional, es wird eher an einer Kleinigkeit bei Dir liegen.
    Insofern solltest Du wissen wollen, was falsch ist. ;)

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Beim Erstellen des Gebietes schreibst Du doch bereits in die Datenbank.
    Also musst Du nur die DataSource Deiner Activity mitteilen und damit dann so arbeiten, wie Du in der MainActivity damit arbeitest.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!