I already created my SQL DB and its environment. Filling it with values and sending it to ListView is working, but the way it is shown is not quite nice, because the the different values a not put into different columns. So I tried to put them into eight columns.
First, I created a Column_Row.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://ift.tt/nIICcg"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/NDAColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1"
android:textStyle="bold" />
<TextView
android:id="@+id/StartpunktColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/AgeColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/GeschlechtColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/DauerColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/GeschwindigkeitColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/StreckenprofilColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1" />
<TextView
android:id="@+id/DistanzColumn"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="1" />
</LinearLayout>
Than, I created a Constants.xml
package uni_hannover.sportapp;
public class Constants {
public static final String FIRST_COLUMN="First";
public static final String SECOND_COLUMN="Second";
public static final String THIRD_COLUMN="Third";
public static final String FOURTH_COLUMN="Fourth";
public static final String FIFTH_COLUMN="Fifth";
public static final String SIXTH_COLUMN="Sixth";
public static final String SEVENTH_COLUMN="Seventh";
public static final String EIGHTS_COLUMN="Eights";
}
After that I coded my ListViewAdapterCycling.class
package uni_hannover.sportapp;
import static uni_hannover.sportapp.Constants.FIRST_COLUMN;
import static uni_hannover.sportapp.Constants.SECOND_COLUMN;
import static uni_hannover.sportapp.Constants.THIRD_COLUMN;
import static uni_hannover.sportapp.Constants.FOURTH_COLUMN;
import static uni_hannover.sportapp.Constants.FIFTH_COLUMN;
import static uni_hannover.sportapp.Constants.SIXTH_COLUMN;
import static uni_hannover.sportapp.Constants.SEVENTH_COLUMN;
import static uni_hannover.sportapp.Constants.EIGHTS_COLUMN;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
public class ListViewAdapterCycling extends BaseAdapter{
public ArrayList<HashMap<String, String>> list;
Activity activity;
TextView txtFirst;
TextView txtSecond;
TextView txtThird;
TextView txtFourth;
TextView txtFifth;
TextView txtSixth;
TextView txtSeventh;
TextView txtEights;
public ListViewAdapterCycling(Activity activity,ArrayList<HashMap<String, String>> list){
super();
this.activity=activity;
this.list=list;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return list.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return list.get(position);
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
LayoutInflater inflater=activity.getLayoutInflater();
if(convertView == null){
convertView=inflater.inflate(R.layout.column_row, null);
txtFirst=(TextView) convertView.findViewById(R.id.NDAColumn);
txtSecond=(TextView) convertView.findViewById(R.id.StartpunktColumn);
txtThird=(TextView) convertView.findViewById(R.id.AgeColumn);
txtFourth=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
txtFifth=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
txtSixth=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
txtSeventh=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
txtEights=(TextView) convertView.findViewById(R.id.GeschlechtColumn);
}
HashMap<String, String> map=list.get(position);
txtFirst.setText(map.get(FIRST_COLUMN));
txtSecond.setText(map.get(SECOND_COLUMN));
txtThird.setText(map.get(THIRD_COLUMN));
txtFourth.setText(map.get(FOURTH_COLUMN));
txtFifth.setText(map.get(FIFTH_COLUMN));
txtSixth.setText(map.get(SIXTH_COLUMN));
txtSeventh.setText(map.get(SEVENTH_COLUMN));
txtEights.setText(map.get(EIGHTS_COLUMN));
return convertView;
}
}
I think that there are not mistakes so far...but now I want to implement the whole thing into my activity, which aims to show the list view and this is my try:
package uni_hannover.sportapp;
import static uni_hannover.sportapp.Constants.FIRST_COLUMN;
import static uni_hannover.sportapp.Constants.SECOND_COLUMN;
import static uni_hannover.sportapp.Constants.THIRD_COLUMN;
import static uni_hannover.sportapp.Constants.FOURTH_COLUMN;
import static uni_hannover.sportapp.Constants.FIFTH_COLUMN;
import static uni_hannover.sportapp.Constants.SIXTH_COLUMN;
import static uni_hannover.sportapp.Constants.SEVENTH_COLUMN;
import static uni_hannover.sportapp.Constants.EIGHTS_COLUMN;
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;
import java.util.ArrayList;
import java.util.HashMap;
import android.widget.AdapterView;
import android.view.View;
import android.widget.Toast;
public class Cycling_Join extends AppCompatActivity {
public static final String LOG_TAG = Cycling_Join.class.getSimpleName();
private CyclingMemoDataSource dataSource;
private ArrayList<HashMap<String, String>> list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_cycling__join);
dataSource = new CyclingMemoDataSource(this);
Log.d(LOG_TAG, "Die Datenquelle wird geöffnet.");
dataSource.open();
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);
list=new ArrayList<HashMap<String,String>>();
HashMap<String,String> temp=new HashMap<String, String>();
temp.put(FIRST_COLUMN, "NDA");
temp.put(SECOND_COLUMN, "Startpunkt");
temp.put(THIRD_COLUMN, "Alter");
temp.put(FOURTH_COLUMN, "Geschlecht");
temp.put(FIFTH_COLUMN,"Dauer");
temp.put(SIXTH_COLUMN, "Geschwindigkeit");
temp.put(SEVENTH_COLUMN, "Streckenprofil");
temp.put(EIGHTS_COLUMN,"Distanz");
list.add(temp);
ListViewAdapterCycling adapter=new ListViewAdapterCycling(this, list);
shoppingMemosListView.setAdapter(adapter);
}
@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);
}
}
If I run the app, he only shows me four columns with four values I set in the HashMap, but my aim is, that he shows all values from my SQL in an average table with eight columns... Where is my mistake? I think the connector to the SQL is missing...
Would be really happy about some help!
For additional information see my SQL Helper
package uni_hannover.sportapp;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
public class CyclingMemoDBHelper extends SQLiteOpenHelper {
private static final String LOG_TAG =
CyclingMemoDBHelper.class.getSimpleName();
public static final String DB_NAME = "cycling.db";
public static final int DB_VERSION = 1;
public static final String TABLE_CYCLING = "cycling";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_NDA = "NDA";
public static final String COLUMN_Startpunkt = "Startpunkt";
public static final String COLUMN_Age = "Age";
public static final String COLUMN_Geschlecht = "Geschlecht";
public static final String COLUMN_Dauer = "Dauer";
public static final String COLUMN_Geschwindigkeit = "Geschwindigkeit";
public static final String COLUMN_Streckenprofil = "Streckenprofil";
public static final String COLUMN_Distanz = "Distanz";
public static final String SQL_CREATE =
"CREATE TABLE " + TABLE_CYCLING +
"(" + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
COLUMN_NDA + " TEXT, " +
COLUMN_Startpunkt + " TEXT NOT NULL, " +
COLUMN_Age + " TEXT NOT NULL, " +
COLUMN_Geschlecht + " TEXT NOT NULL, " +
COLUMN_Dauer + " TEXT NOT NULL, " +
COLUMN_Geschwindigkeit + " TEXT NOT NULL, " +
COLUMN_Streckenprofil + " TEXT NOT NULL, " +
COLUMN_Distanz + " TEXT NOT NULL);";
public CyclingMemoDBHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
Log.d(LOG_TAG, "DbHelper hat die Datenbank: " + getDatabaseName() + " erzeugt.");
}
@Override
public void onCreate(SQLiteDatabase db) {
try {
Log.d(LOG_TAG, "Die Tabelle wird mit SQL-Befehl: " + SQL_CREATE + " angelegt.");
db.execSQL(SQL_CREATE);
}
catch (Exception ex) {
Log.e(LOG_TAG, "Fehler beim Anlegen der Tabelle: " + ex.getMessage());
}
}
@Override
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion){
}
}
And my DataSource.class
package uni_hannover.sportapp;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import android.content.ContentValues;
import android.database.Cursor;
import java.util.ArrayList;
import java.util.List;
import android.database.SQLException;
public class CyclingMemoDataSource {
private static final String LOG_TAG =
CyclingMemoDataSource.class.getSimpleName();
private SQLiteDatabase database;
private CyclingMemoDBHelper dbHelper;
private String[] columns = {
CyclingMemoDBHelper.COLUMN_ID,
CyclingMemoDBHelper.COLUMN_NDA,
CyclingMemoDBHelper.COLUMN_Startpunkt,
CyclingMemoDBHelper.COLUMN_Age,
CyclingMemoDBHelper.COLUMN_Geschlecht,
CyclingMemoDBHelper.COLUMN_Dauer,
CyclingMemoDBHelper.COLUMN_Geschwindigkeit,
CyclingMemoDBHelper.COLUMN_Streckenprofil,
CyclingMemoDBHelper.COLUMN_Distanz
};
public CyclingMemoDataSource (Context context){
dbHelper = new CyclingMemoDBHelper(context);
}
public void open() throws SQLException {
database = dbHelper.getWritableDatabase();
}
public void close() {
dbHelper.close();
Log.d(LOG_TAG, "Datenbank mit Hilfe des DbHelpers geschlossen.");
}
public CyclingMemo createCyclingMemo(String NDA, String Startpunkt, String Age, String Geschlecht, String Dauer,
String Geschwindigkeit, String Streckenprofil, String Distanz) {
ContentValues values = new ContentValues();
values.put(CyclingMemoDBHelper.COLUMN_NDA, NDA);
values.put(CyclingMemoDBHelper.COLUMN_Startpunkt, Startpunkt);
values.put(CyclingMemoDBHelper.COLUMN_Age, Age);
values.put(CyclingMemoDBHelper.COLUMN_Geschlecht, Geschlecht);
values.put(CyclingMemoDBHelper.COLUMN_Dauer, Dauer);
values.put(CyclingMemoDBHelper.COLUMN_Geschwindigkeit, Geschwindigkeit);
values.put(CyclingMemoDBHelper.COLUMN_Streckenprofil, Streckenprofil);
values.put(CyclingMemoDBHelper.COLUMN_Distanz, Distanz);
long insertId = database.insert(CyclingMemoDBHelper.TABLE_CYCLING, null, values);
Cursor cursor = database.query(CyclingMemoDBHelper.TABLE_CYCLING,
columns, CyclingMemoDBHelper.COLUMN_ID + "=" + insertId,
null, null, null, null);
cursor.moveToFirst();
CyclingMemo shoppingMemo = cursorToCyclingMemo(cursor);
cursor.close();
return shoppingMemo;
}
private CyclingMemo cursorToCyclingMemo(Cursor cursor) {
int idIndex =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_ID);
int idNDA =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_NDA);
int idStartpunkt =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Startpunkt);
int idAge =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Age);
int idGeschlecht =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Geschlecht);
int idDauer =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Dauer);
int idGeschwindigkeit =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Geschwindigkeit);
int idStreckenprofil =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Streckenprofil);
int idDistanz =
cursor.getColumnIndex(CyclingMemoDBHelper.COLUMN_Distanz);
String NDA = cursor.getString(idNDA);
String Startpunkt = cursor.getString(idStartpunkt);
String Age = cursor.getString(idAge);
String Geschlecht = cursor.getString(idGeschlecht);
String Dauer = cursor.getString(idDauer);
String Geschwindigkeit = cursor.getString(idGeschwindigkeit);
String Streckenprofil = cursor.getString(idStreckenprofil);
String Distanz = cursor.getString(idDistanz);
long id = cursor.getLong(idIndex);
CyclingMemo cyclingMemo2 = new CyclingMemo(NDA, Startpunkt, Age, Geschlecht, Dauer, Geschwindigkeit, Streckenprofil, Distanz, id);
return cyclingMemo2;
}
public List<CyclingMemo> getAllCyclingMemos() {
List<CyclingMemo> cyclingMemoList = new ArrayList<>();
Cursor cursor = database.query(CyclingMemoDBHelper.TABLE_CYCLING,
columns, null, null, null, null, null);
cursor.moveToFirst();
CyclingMemo cyclingMemo2;
while(!cursor.isAfterLast()) {
cyclingMemo2 = cursorToCyclingMemo(cursor);
cyclingMemoList.add(cyclingMemo2);
Log.d(LOG_TAG, "ID: " + cyclingMemo2.getId() + ", Inhalt: " + cyclingMemo2.toString());
cursor.moveToNext();
}
cursor.close();
return cyclingMemoList;
}
}
Aucun commentaire:
Enregistrer un commentaire