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:
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:
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:
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:
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.