Songtext-Datenbank programmieren

  • Antworten:21
Johannes L.
  • Forum-Beiträge: 16

02.03.2013, 13:24:58 via Website

Hallo zusammen,
ich steige gerade ins Android-App programmieren ein und bevor ich anfange meine App Zeile für Zeile zu programmieren, möchte ich gerne wissen, ob einer von euch schonmal eine ähnliche App programmiert hat?
Wir haben von unserer Blaskapelle einige Lieder mit Text und zusätzlich noch Lieder die wir immer singen, ohne dabei zu spielen. Die Texte liegen mir vor und diese werde ich per Texterkennung digitalisieren.
Die App stelle ich mir folgendermaßen vor:
1. Alphabetisch alle Lieder untereinander (Hauptmenü)
2. Lied anklicken und Text erscheint.
3. Mit zurück wieder ins Hauptmenü.
An sich nicht viel!

Hat jemand schon mal so etwas geschrieben?
Ich bedanke mich schonmal im voraus und würde mich über eure Hilfe sehr freuen!

Mfg Johannes

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

02.03.2013, 15:10:24 via Website

Das sollte recht trivial sein. Eine Liste der Lieder, jedes hat eine _ID in er DB. Mit Click holst du dir den Text und stellst ihn auf einer weiteren Activity/Fragment dar. Ich sehe eher das du die Lieder halbwegs gut layoutet als ein 'problem' an.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
Johannes L.
  • Forum-Beiträge: 16

02.03.2013, 17:57:52 via Website

Muss ich denn alles selbst schreiben oder gibt es da irgendwelche Vorlagen zur Textbearbeitung und Formatierung?
Oder kennst du ein gutes Nachschlagewerk dafür?

Und noch eine andere Frage. Wenn das Development Tool mit der neusten Androidsoftware 4.2.2 arbeitet, ist die App dann mit älteren Versionen kompatibel?

Besten dank für deine schnelle Antwort.
Gruß,
Johannes

Antworten
Enrico
  • Forum-Beiträge: 33

02.03.2013, 18:25:42 via App

ja ist abwärtskompitabel wenn du keine sachen nutzt die erst in 4.2 hinzukommen.

Antworten
Christian
  • Forum-Beiträge: 307

02.03.2013, 18:27:33 via Website

Hi Johannes,

Muss ich denn alles selbst schreiben oder gibt es da irgendwelche Vorlagen zur Textbearbeitung und Formatierung?
Was für Vorlagen meinst du?


Oder kennst du ein gutes Nachschlagewerk dafür?
Zur Android Entwicklung Allgemein? Reto Meier und Commonsware

Wenn das Development Tool mit der neusten Androidsoftware 4.2.2 arbeitet, ist die App dann mit älteren Versionen kompatibel?
Ja sie laufen auch auf älteren Version ABER NUR wenn du Funktionen nutzt die es auch in den älteren Version gibt. Ausgleichen kannst du das einwenig mit der Support Library. Sie ermöglicht teilweise die Nutzung von Funktionen aus neueren Android Versionen auf älteren Geräten bzw in älteren Android Versionen.

— geändert am 02.03.2013, 18:28:36

Antworten
Timo D.
  • Forum-Beiträge: 182

02.03.2013, 19:06:33 via Website

Da du scheinbar noch recht neu auf dem Gebiet bist, solltest du Normalisierung beachten. Das ist einfach grundlegend für die Arbeit mit Datenbanken. So erspart man sich Fehler und später sehr viel Arbeit ;)

Bei Wikipedia steht so etwas sehr gut und simpel erklärt:
http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

Also erst auf dem Papier so etwas designen, die Umsetzung ist dann mehr oder weniger trivial. Da kannst du z.B. sqlite nutzen, was sehr gut dafür geeignet ist.

Darf ich fragen, wie die Texterkennung erfolgt? So etwas interessiert mich gerade brennend.

— geändert am 02.03.2013, 19:08:21

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Antworten
impjor
  • Forum-Beiträge: 1.793

02.03.2013, 20:45:08 via Website

So eine simple App dürfte relativ leicht auch für SQL-Einsteiger zu programmieren sein.
Im Prinzip braucht man ja nur in einem table die Spalten id, name, songtext. Da müssen ja eigentlich keine Relationen integriert werden.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Johannes L.
  • Forum-Beiträge: 16

03.03.2013, 13:07:07 via Website

Danke für die vielen Antworten.
Da die App keine speziellen Funktionen benutzt, werd ich sie für die Android 2.3 Software schreiben. Diese ist selbst auf älteren Handys vorhanden.

Texterkennung, falls der Text nicht digital verfügbar, per OCR-Software und Scanner. Ich vermute, den Text in die App zu intigrieren ist besser, als ein Bild oder eine PDF Datei zu verarbeiten. Bezüglich Formatierung und Lesbarkeit(heranzoomen) bei den unterschiedlichen Handys, oder?

Ich werd mich jetzt erstmal schlau lesen und ein wenig rumprobieren. Falls ich weitere Fragen habe, meld ich mich nochmal.

Erstmal danke für eure Hilfe.

Antworten
Johannes L.
  • Forum-Beiträge: 16

07.03.2013, 22:44:21 via Website

Hallo zusammen,
ich hab jetzt ein weiteres Problem. Wie man den Bildern entnehmen kann, hab ich ein Table-Layout und möchte das mit einem Scroll-View-Layout verbinden, damit ich noch mehr Button einfügen kann, ohne das die Button kleiner werden (Müssen ja auch mit Wurstfingern bedienbar bleiben).
Man soll einfach weiter runter scrollen können.



Vielen Dank schonmal.
Johannes

— geändert am 07.03.2013, 22:45:28

Antworten
Timo D.
  • Forum-Beiträge: 182

07.03.2013, 22:49:01 via Website

XML. Wieso nicht ein lineares Layout? Man macht es per XML.
Z.B. so:
1<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
2 android:layout_width="fill_parent" android:layout_height="fill_parent">
3<LinearLayout
4 android:id="@+id/layout"
5 android:layout_width="fill_parent"
6 android:layout_height="wrap_content"
7 android:orientation="vertical"
8 >
9...
10</LinearLayout>
11</ScrollView>

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

07.03.2013, 22:52:53 via App

Vielleicht hilft dir eine ScrollView.
Oder du nutzt statt Buttons eine ListView.

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

07.03.2013, 22:54:57 via Website

Sieht für mich nach einer klassischen ListView Anwendung aus.
In Verbindung mit einer Datenbank wäre die App dann einmal geschrieben und durch Austauschen der DB, die man bequem am PC pflegen kann, ohne Updates/Codeänderungen beliebig erweiterbar.

Antworten
Johannes L.
  • Forum-Beiträge: 16

08.03.2013, 12:12:10 via Website

Und bei einer ListView kann man trotzdem die Titel anklicken und kommt so auf einer neuen Seite zum Liedtext?

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.03.2013, 12:50:05 via Website

Wenn man das so implementiert, dann ja ;)

Für die Buttons hast du jeweils einen Click-Listener gemacht, für die Liste brauchst du nur einen; in dem ermittelst du das geklickte Item und öffnest dann (wie bei den Buttons) die "neue Seite".

...oder habe ich jetzt die Frage falsch verstanden?

Antworten
Johannes L.
  • Forum-Beiträge: 16

08.03.2013, 13:11:15 via Website

Ja, für jeden Button habe ich eine Click-Listener. Dann ist das mit dem ListView einfacher!


Ich erzeuge mir ein ListArray und da kann ich meine Strings reinschreiben, sodass diese Strings anstatt Item1, Item2,.... stehen.
//List-Array anlegen
List<String> LiederListe = new ArrayList<String>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Liste füllen
LiederListe.add("Dem Land Tirol die Treue");
LiederListe.add("Egerländer Straßenmarsch");
LiederListe.add("Koliner Marsch");
LiederListe.add("Steigerlied");
//Titel anstatt Item1, Item2,... anzeigen lassen
ArrayAdapter<String> adapterText = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, LiederListe);

ListView Text = (ListView) findViewById(R.id.ListView1);
Text.setAdapter(adapterText);
}
//Neue Seite erstellen
public void Text(View view){
setContentView(R.layout.text);
}
Und dann kann ich mit einem Click-Listener immer das angeklickt Item herausfinden und öffne dann den Text. Hab ich so versucht, geht aber nicht!
//Item herausfinden
public boolean oneItemSelected(ListItem item){
TextView text = (TextView) findViewById (R.id.text);
if (item.toString().equals("Steigerlied")){
text.setText(R.string.steiger);
}
return(true);

Kann mir nochmal jemand helfen?
Besten dank dafür!

— geändert am 08.03.2013, 15:16:47

Antworten
impjor
  • Forum-Beiträge: 1.793

08.03.2013, 16:07:29 via App

Warum benutzt du einen onItemSelected listener?
Versuch mal onItemclickListener

Dann sowas wie view.getText()

Gruß

— geändert am 08.03.2013, 16:14:17

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

08.03.2013, 20:26:53 via Website

Genau, du benötigst etwas in dieser Art:

class ... extends Activity implements AdapterView.OnItemClickListener

und dann:


@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long id) {
...
}
wobei in deiner Skizze mein Parameter "position" der Index in dein Array sein müsste (ausprobieren).

Antworten
Johannes L.
  • Forum-Beiträge: 16

09.03.2013, 14:59:51 via Website

So wie du es beschreiben hast, habe ich es versucht, aber nicht hinbekommen.

Kann ich nicht auch einen OnClickListener auf den ListView setzen? Siehe Code:

public class MainActivity extends Activity {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

List<String> liederListe = new ArrayList<String>();

liederListe.add("Dem Land Tirol die Treue");
liederListe.add("Egerländer Straßenmarsch");
liederListe.add("Koliner Marsch");
liederListe.add("Steigerlied");

ArrayAdapter<String> adapterText = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, liederListe);

ListView Text = (ListView) findViewById(R.id.ListView1);
Text.setAdapter(adapterText);

Text.setOnClickListener(new OnClickListener(){

public void onClick(View v){
TextView text = (TextView) findViewById (R.id.text);
setContentView(R.layout.text);
if (text.toString().equals("Steigerlied")){
text.setText(R.string.steiger);
}
}
});
}
Oder ist Text.setOnClickListener nicht möglich.Jetzt kann ich die App nämlich nicht mehr starten.
Kann einer den Fehler erkennen? Oder geht das so gar nicht?

Besten Dank.

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

09.03.2013, 16:54:24 via Website

impjors Beitrag beschreibt das eine Problem, außerdem denk' noch mal über die Bedeutung dieser Zeilen nach:

TextView text = (TextView) findViewById (R.id.text);
setContentView(R.layout.text);
if (text.toString().equals("Steigerlied")){
text.setText(R.string.steiger);

- Du besorgst einen TextView aus der aktuellen Ansicht;
wie könnte da ein Song-Titel drinstehen?
- du vertauscht danach(!) die Ansicht, um darin ein TextView aus der vorigen Ansicht zu beschreiben;
Wie könnte das wohl funktionieren?

Abgesehen davon würde ich empfehlen, für die Anzeige der Texte eine neue Activity zu implementieren, statt in der vorhandenen das Layout zu tauschen.

Antworten
Johannes L.
  • Forum-Beiträge: 16

12.03.2013, 17:23:02 via Website

Jo, besten dank.
Hab die App am Laufen. Genau so hab ich mir das vorgestellt!

Antworten