Und jetzt wird es haarig. Da ich nicht nur eine Activity habe, welche sowohl die Eingabemaske als auch die Darstellung über ListView zeigt, wird es nun kompliziert.
Meine Activity Cycling_Create ist das UI mit zwei TextEdit und sechs Spinner. Hier sollen die Daten in die Datenbank gespeichert werden.
Die Activity Join soll am Ende die eingegebene Daten aus der SQL Base ziehen und als ListView ausspucken.
Hier ist mal meine Cycling_Create:
package uni_hannover.sportapp;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.inputmethod.InputMethodManager;
import android.text.TextUtils;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.ArrayAdapter;
import java.util.List;
public class Cycling_Create extends AppCompatActivity {
public static final String LOG_TAG = MainActivity.class.getSimpleName();
private CyclingMemoDataSource dataSource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cycling__create);
Log.d(LOG_TAG, "Das Datenquellen-Objekt wird angelegt.");
dataSource = new CyclingMemoDataSource(this);
activateCreateButton();
}
@Override
protected void onResume() {
super.onResume();
Log.d(LOG_TAG, "Die Datenquelle wird geöffnet.");
dataSource.open();
}
@Override
protected void onPause() {
super.onPause();
Log.d(LOG_TAG, "Die Datenquelle wird geschlossen.");
dataSource.close();
}
private void activateCreateButton() {
Button buttonCreateCyclingActivity = (Button) findViewById(R.id.create_cycling_activity);
final EditText editNDA = (EditText) findViewById(R.id.editNDA);
final EditText editText2 = (EditText) findViewById(R.id.editText2);
final Spinner spinner_alter = (Spinner) findViewById(R.id.spinner_alter);
final Spinner spinner_geschlecht = (Spinner) findViewById(R.id.spinner_geschlecht);
final Spinner spinner_dauer = (Spinner) findViewById(R.id.spinner_dauer);
final Spinner spinner_geschwindigkeit = (Spinner) findViewById(R.id.spinner_geschwindigkeit);
final Spinner spinner_streckenprofil = (Spinner) findViewById(R.id.spinner_streckenprofil);
final Spinner spinner_distanz_cycling = (Spinner) findViewById(R.id.spinner_distanz_cycling);
buttonCreateCyclingActivity.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String NDAString = editNDA.getText().toString();
String StartpunktString = editText2.getText().toString();
if (TextUtils.isEmpty(NDAString)) {
editNDA.setError(getString(R.string.editText_errorMessage));
return;
}
if (TextUtils.isEmpty(StartpunktString)) {
editText2.setError(getString(R.string.editText_errorMessage));
return;
}
editNDA.setText("");
editText2.setText("");
String Age = spinner_alter.getSelectedItem().toString();
String Geschlecht = spinner_geschlecht.getSelectedItem().toString();
String Dauer = spinner_dauer.getSelectedItem().toString();
String Geschwindigkeit = spinner_geschwindigkeit.getSelectedItem().toString();
String Streckenprofil = spinner_streckenprofil.getSelectedItem().toString();
String Distanz = spinner_distanz_cycling.getSelectedItem().toString();
dataSource.createCyclingMemo (NDAString, StartpunktString, Age, Geschlecht, Dauer, Geschwindigkeit, Streckenprofil, Distanz);
InputMethodManager inputMethodManager;
inputMethodManager = (InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
if (getCurrentFocus() != null) {
inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
}
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Alles anzeigen
CyclingJoin hänge ich auch schonmal an, aber da ist noch nicht viel drin...
package uni_hannover.sportapp;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.List;
public class Cycling_Join extends AppCompatActivity {
public static final String LOG_TAG = Cycling_Join.class.getSimpleName();
private CyclingMemoDataSource dataSource;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cycling__join);
CyclingMemo testMemo = new CyclingMemo("nkjn", "adas", "das","nkjn", "adas", "das","nkjn", "adas");
Log.d(LOG_TAG, "Inhalt der Testmemo: " + testMemo.toString());
dataSource = new CyclingMemoDataSource(this);
Log.d(LOG_TAG, "Die Datenquelle wird geöffnet.");
dataSource.open();
CyclingMemo cyclingMemo = dataSource.createCyclingMemo("nkjn", "adas", "das","nkjn", "adas", "das","nkjn", "adas");
Log.d(LOG_TAG, "Es wurde der folgende Eintrag in die Datenbank geschrieben:");
Log.d(LOG_TAG, "ID: " + cyclingMemo.getNDA() + ", Inhalt: " + cyclingMemo.toString());
Log.d(LOG_TAG, "Folgende Einträge sind in der Datenbank vorhanden:");
showAllListEntries();
Log.d(LOG_TAG, "Die Datenquelle wird geschlossen.");
dataSource.close();
}
private void showAllListEntries () {
List<CyclingMemo> cyclingMemoList = dataSource.getAllCyclingMemos();
ArrayAdapter<CyclingMemo> cyclingMemoArrayAdapter = new ArrayAdapter<> (
this,
android.R.layout.simple_list_item_multiple_choice,
cyclingMemoList);
ListView shoppingMemosListView = (ListView) findViewById(R.id.cycling_memos);
shoppingMemosListView.setAdapter(cyclingMemoArrayAdapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_cycling__join, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
}
Alles anzeigen
Mein Hauptproblem ist derzeit noch beim Schreiben in die Datenbank, da beim Drücken des Create Button die App abstürzt.
logcat sagt dazu das, womit ich jedoch nicht wirklich was anfangen soll. Das Internet sagt, dass irgendwas mit dem Cursor und der null nicht stimmt, aber da hört es schon auf bei mir. In die DB wird wie gesagt noch nichts geschrieben, erstellt wird sie aber...
09-15 20:48:10.459 2027-2027/uni_hannover.sportapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: uni_hannover.sportapp, PID: 2027
android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
Ich werde morgen nochmal mit Vollgas rangehen und mit dem Vogella-Link abgleichen und anpassen, aber vielleicht kann mir wer von euch auf die Schnelle schon bei diesem Fehler oder etwas grundsätzlich falschen behilflich sein?