Hier ist noch der Quelltext:
Die Klasse BrechnerActivity:
Java
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.view.ContextMenu;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ContextMenu.ContextMenuInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import android.R.*;
import java.text.ParseException;
public class BerechnerActivity extends Activity {
/** Called when the activity is first created.*/
private BerechnerDbAdapter mDbHelper;
private Long mRowId;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mDbHelper = new BerechnerDbAdapter(this);
setContentView(R.layout.main);
mRowId = savedInstanceState != null ? savedInstanceState.getLong(BerechnerDbAdapter.KEY_ROWID) : null;
setButtonClickListenerberechnen();
}
//Den folgenden Quellcode habe ich aus Android für Dummies und das ist der, der sich auf die Db bezieht
private void setRowIdfromIntent(){
if(mRowId == null){
Bundle extras = getIntent().getExtras();
mRowId = extras != null ? extras.getLong(BerechnerDbAdapter.KEY_ROWID) : null;
}
}
@Override
protected void onPause(){
super.onPause();
mDbHelper.close();
}
@Override
protected void onResume(){
super.onResume();
mDbHelper.open();
setRowIdfromIntent();
populateFields();
}
private void populateFields(){
if (mRowId != null){
Cursor berechner = mDbHelper.fetchBerechner(mRowId);
startManagingCursor(berechner);
}
}
@Override
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putLong(BerechnerDbAdapter.KEY_ROWID, mRowId);
}
//ab hier ist es wieder mein eigener Quellcode
public static final String VERBRAUCH_KEY = "key-verbrauch";
public static final String PREIS_KEY = "key-preis";
public void setButtonClickListenerberechnen() {
final Button bt_berechne = (Button) findViewById(R.id.bt_berechnen);
bt_berechne.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
EditText nf_liter = (EditText) findViewById(R.id.lb_liter);
EditText nf_literpreis = (EditText) findViewById(R.id.lb_preisliter);
EditText nf_preis = (EditText) findViewById(R.id.lb_preis);
EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
int laengekilometer = nf_kilometer.getText().length();
int laengeliter = nf_liter.getText().length();
int laengepreis = nf_preis.getText().length();
int laengeliterpreis = nf_literpreis.getText().length();
if ((laengekilometer == 0)){
Context context = getApplicationContext();
CharSequence text = "Sie müssen die gefahrenen Kilometer eingeben!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}else{
if((laengeliter == 0) && (laengepreis == 0) && (laengeliterpreis == 0)){
Context context = getApplicationContext();
CharSequence text = "Sie müssen mindestens zwei von drei weiteren Feldern ausfüllen!";
int duration = Toast.LENGTH_SHORT;
Toast toast = Toast.makeText(context, text, duration);
toast.show();
}else if ((laengeliter != 0) && (laengepreis != 0)){
literundpreis();
}else if ((laengeliter != 0) && (laengeliterpreis != 0)){
literundliterpreis();
}else if ((laengepreis != 0) && (laengeliterpreis != 0)){
literpreisundpreis();
}
}
}
});
}
public void ergebnis(double preis, double verbrauch){
final Intent intent = new Intent(this, ErgebnisActivity.class);
intent.putExtra(PREIS_KEY, preis);
intent.putExtra(VERBRAUCH_KEY, verbrauch);
startActivity(intent);
}
public void literundpreis() {
EditText nf_liter = (EditText) findViewById(R.id.lb_liter);
EditText nf_preis = (EditText) findViewById(R.id.lb_preis);
EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
double liter = Double.parseDouble(nf_liter.getText().toString());
double preis = Double.parseDouble(nf_preis.getText().toString());
double kilometer = Double.parseDouble(nf_kilometer.getText().toString());
preis = preis*0.81;
double verbrauch = liter/kilometer*100;
double preisliter = preis/liter;
saveState(preisliter, preis, liter, kilometer, "test");
ergebnis(preis, verbrauch);
}
public void literundliterpreis(){
EditText nf_liter = (EditText) findViewById(R.id.lb_liter);
EditText nf_literpreis = (EditText) findViewById(R.id.lb_preisliter);
EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
double literpreis = Double.parseDouble(nf_literpreis.getText().toString());
double kilometer = Double.parseDouble(nf_kilometer.getText().toString());
double liter = Double.parseDouble(nf_liter.getText().toString());
double preis = literpreis*liter;
preis = preis*0.81;
double verbrauch = liter/kilometer*100;
//saveState(literpreis, preis, liter, kilometer);
ergebnis(preis, verbrauch);
}
public void literpreisundpreis(){
EditText nf_literpreis = (EditText) findViewById(R.id.lb_preisliter);
EditText nf_preis = (EditText) findViewById(R.id.lb_preis);
EditText nf_kilometer = (EditText) findViewById(R.id.lb_kilometer);
double literpreis = Double.parseDouble(nf_literpreis.getText().toString());
double preis = Double.parseDouble(nf_preis.getText().toString());
double kilometer = Double.parseDouble(nf_kilometer.getText().toString());
double liter = preis / literpreis;
preis = preis*0.81;
double verbrauch = liter/kilometer*100;
//habe ich auskommentiert, da es nicht funktioniert hat
//saveState(literpreis, preis, liter, kilometer);
ergebnis(preis, verbrauch);
}
public boolean onCreateOptionsMenu(Menu menu){
getMenuInflater().inflate(R.menu.hauptmenu, menu);
return super.onCreateOptionsMenu(menu);
}
public boolean onOptionsItemSelected(MenuItem item){
switch (item.getItemId()){
case R.id.opt_beenden:
finish();
return true;
default:
return super.onOptionsItemSelected(item);
}
}
public void kontextmenu(Bundle icicle) {
registerForContextMenu(findViewById(android.R.id.list));
}
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
if (v.getId() == android.R.id.list){
getMenuInflater().inflate(R.menu.berechnen_kontextmeneu, menu);
}
super.onCreateContextMenu(menu, v, menuInfo);
}
//hier habe ich versucht in die db etwas zu schreiben
private void saveState(double literpreis, double preis, double liter, double km, String Datum){
String stringliterpreis=Double.toString(literpreis);
String stringpreis=Double.toString(preis);
String stringliter=Double.toString(liter);
String stringkm=Double.toString(km);
if(mRowId == null){
long id = mDbHelper.createBerechner(stringliterpreis, stringliter, stringpreis, stringkm, Datum);
if(id > 0){
mRowId = id;
}else{
mDbHelper.updateBerechner(mRowId, stringliterpreis, stringliter, stringpreis, stringkm, Datum);
}
}
}
}
Alles anzeigen
BerechnerDbAdapter:
Code
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class BerechnerDbAdapter {
private static final String DATABASE_NAME = "data";
private static final String DATABASE_TABLE = "berechner";
private final int DATABASE_VERSION = 1;
public static final String KEY_ROWID = "_id";
public static final String KEY_PREISLITER = "Preis/Liter";
public static final String KEY_PREIS = "Preis";
public static final String KEY_LITER = "Liter";
public static final String KEY_KM = "KM";
public static final String KEY_DATUM = "Datum";
private DatabaseHelper mDbHelper;
private SQLiteDatabase mDb;
private static final String DATABASE_CREATE = "create table" + DATABASE_TABLE + "("
+ KEY_ROWID + " integer primary key autoincrement"
+ KEY_PREISLITER + "text not null, "
+ KEY_LITER + "text not null, "
+ KEY_PREIS + "text not null, "
+ KEY_KM + "text not null, "
+ KEY_DATUM + "text not null);";
private final Context mCtx;
public BerechnerDbAdapter(Context ctx){
this.mCtx = ctx;
}
//ich glaube hier liegt der fehler bin mir aber nicht sicher diese Methode verweist auf die innere Classe weiter unten
public BerechnerDbAdapter open() throws SQLException{
mDbHelper = new DatabaseHelper(mCtx);
mDb = mDbHelper.getWritableDatabase();
return this;
}
public void close(){
mDbHelper.close();
}
public long createBerechner(String PreisProLiter, String Liter, String Preis, String km, String Datum){
ContentValues initialValues = new ContentValues();
initialValues.put(KEY_PREISLITER, PreisProLiter);
initialValues.put(KEY_PREIS, Preis);
initialValues.put(KEY_LITER, Liter);
initialValues.put(KEY_KM, km);
initialValues.put(KEY_DATUM, Datum);
return mDb.insert(DATABASE_TABLE, null, initialValues);
}
public boolean deleteBerechner(long rowId){
return mDb.delete(DATABASE_TABLE, KEY_ROWID + "=" + rowId, null)>0;
}
public Cursor fetchAllBerechner(){
return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_PREISLITER, KEY_PREIS, KEY_LITER, KEY_KM, KEY_DATUM}, null, null, null, null, null);
}
public Cursor fetchBerechner(long rowId) throws SQLException{
Cursor mCursor = mDb.query(true, DATABASE_TABLE, new String[] {KEY_ROWID, KEY_PREISLITER, KEY_PREIS, KEY_LITER, KEY_KM, KEY_DATUM}, KEY_ROWID + "=" + rowId, null, null, null, null, null);
if(mCursor != null){
mCursor.moveToFirst();
}
return mCursor;
}
public boolean updateBerechner(long rowId, String PreisProLiter, String Preis, String Liter, String km, String Datum){
ContentValues args = new ContentValues();
args.put(KEY_PREISLITER, PreisProLiter);
args.put(KEY_PREIS, Preis);
args.put(KEY_LITER, Liter);
args.put(KEY_KM, km);
args.put(KEY_DATUM, Datum);
return mDb.update(DATABASE_TABLE, args, KEY_ROWID + "=" + rowId, null)>0;
}
//Dies ist die Innere Classe, wo ich den Fehler vermute
public class DatabaseHelper extends SQLiteOpenHelper {
DatabaseHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db){
db.execSQL(DATABASE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
}
}
Alles anzeigen