In dem Tutorial von Vogel wird aber nicht erklärt wie man das macht, das man mit einer anderen Activity in die Datenbank reinschreibt.
Beiträge von Gamerac
-
-
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
-
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:Javapackage 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:
Javapackage 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:
Codepackage 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:
Javapackage 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.