Apps für Android programmieren leicht gemacht!
Raspberry Pi mit dem Smartphone steuern - Teil 4

4. Raspberry Pi mit dem Smartphone steuern

Weiterführend zu unserer Artikelreihe „Raspberry Pi mit dem Smartphone steuern“, fahren wir nun nach Teil 3 mit dem vierten Teil fort.

In diesem Artikel möchte ich gerne einen weiteren Teilbereich der App ansprechen.
Dem Hinzufügen von Befehle in die Datenbank und dem Bereich der Eingabe.

Wir haben unsere App bereits in sofern fertiggestellt, als dass es uns nun möglich ist Befehle in der Datenbank zu speichern, unsere Befehle auf der Startseite anzuzeigen und bei einem Klick den Befehl auszuführen. Leider fehlt bis dato noch eine Möglichkeit innerhalb der App neue Befehle in die Datenbank ein zu pflegen.

 

Speicherung der Befehle:

Beginnen wir mit einer einfachen Funktion, welche wir aufrufen, um die Befehle zu speichern.
Wenn wir uns an den zweiten Artikel zurück erinnern, dann wissen wir, dass unsere Datenbank drei Dinge speichert. Die ID, den Titel und den eigentlichen Befehl.
Wir sollten also eine Funktion erstellen, der wir zwei dieser drei Dinge übergeben können und die anschließend die Speicherung in der Datenbank übernimmt. Wir sollten den Titel und den Befehl übergeben. Die ID können wir innerhalb der Funktion dynamisch generieren.

public void speichereBefehl(String titel, String befehl){
    // Übernehme hier die Speicherung des Befehls
}

Die ID des Befehls generieren wir aus der momentanen Zeit in Sekunden.
Es ist relativ unwahrscheinlich, bis unmöglich, mehrere Befehle zur gleichen Sekunde in die Datenbank zu schreiben, so dass zwei Befehle die gleiche ID zugewiesen bekommen.

// Lese die Zeit in Millisekunden aus und teile durch 1000, um auf Sekunden zu gelangen.
int id = (int) (System.currentTimeMillis() / 1000);

Anschließend gilt es innerhalb der „speichereBefehl“ Funktion zu prüfen, ob die Eingabefelder leer waren, und anschließend die Eingaben zu speichern. Falls eines der Eingabefelder leer war, geben wir eine Fehlermeldung aus.

if(!titel.equals("") && !befehl.equals("")){

    DB_Befehle DB_e = new DB_Befehle(MainActivity.this);
    DB_e.addBefehl(id, titel, befehl);

    // Gehe bei erfolgreicher Speicherung zur Startseite zurück
    zeigeStart();

}else{

    // Fehlermeldung ausgeben, falls eines der Felder frei war.
    Toast.makeText(MainActivity.this, "Es scheinen noch Felder frei zu sein.", Toast.LENGTH_SHORT).show();

}

 

Design:

Supi, wir haben unsere Funktion, zum Speichern der Befehle.
Es fehl nun noch eine Funktion zum Aufrufen der Eingabeseite, das Aussehen der Seite und eine Funktion, um auf den „Speichern“-Knopf zu reagieren. Zunächst müssen wir jedoch eine Design erstellen, welches wir dann anschließend anzeigen lassen können.

Wir erstellen im Ordner res -> layout eine neue Datei mit dem Namen „activity_neuer_befehl.xml“ und fügen ein:

<?xml version="1.0" encoding="utf-8"?>
<!--
  ~ Copyright 2016 www.droid-lernen.de
  ~
  ~ Licensed under the Apache License, Version 2.0 (the „License“);
  ~ you may not use this file except in compliance with the License.
  ~ You may obtain a copy of the License at
  ~
  ~ http://www.apache.org/licenses/LICENSE-2.0
  ~
  ~ Unless required by applicable law or agreed to in writing, software
  ~ distributed under the License is distributed on an „AS IS“ BASIS,
  ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  ~ See the License for the specific language governing permissions and
  ~ limitations under the License.
  -->

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:text="Neuen Befehl hinzufügen:"
        android:id="@+id/textView2"
        android:layout_margin="10dp" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/edittext_titel"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="10dp"
        android:hint="Titel:" />

    <EditText
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textMultiLine"
        android:ems="10"
        android:id="@+id/edittext_befehl"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:lines="5"
        android:hint="Befehl:" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hinzufügen"
        android:id="@+id/button_hinzufuegen"
        android:layout_gravity="right"
        android:layout_marginRight="16dp"
        android:background="@color/colorPrimary"
        android:textColor="@android:color/white"
        android:padding="10dp" />

</LinearLayout>

 

Anzeige & Eingabe der Befehle:

Weiter gehts!
Unser Design steht.
Machen wir uns daran die Eingabeseite auch anzeigen zu können und auf den Klick des „Speichern“-Knopfes zu reagieren.

Dazu wechseln wir in die Datei „MainActivity.java“ und erstellen eine neue Funktion „zeigeNeuerBefehl()“, als void.

public void zeigeNeuerBefehl(){
    
    // Zeige unser eben erstelles layout an.
    setContentView(R.layout.acitivity_neuer_befehl);

    // Reagiere auf einen Klick auf den "Speichern"-Knopf.
    Button hinzufuegen_button = (Button) findViewById(R.id.button_hinzufuegen);
    if(hinzufuegen_button != null){
        hinzufuegen_button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // Erstelle Variablen, um die Textfeldeingabe zwischenzuspeichern.
                String titel = "";
                String befehl = "";

                // Lese den Titel aus und speichere ihn zwischen.
                EditText edittext_titel = (EditText) findViewById(R.id.edittext_titel);
                if(edittext_titel != null){
                    titel = edittext_titel.getText().toString();
                }

                // Lese den befehl aus und speichere ihn zwischen.
                EditText edittext_befehl = (EditText) findViewById(R.id.edittext_befehl);
                if(edittext_befehl != null){
                    befehl = edittext_befehl.getText().toString();
                }

                // Rufe die Funktion auf, welche die Speicherung des befehl übernimmt.
                speichereBefehl(titel, befehl);

            }
        });
    }

}

 

Übrigens:
Damit nach dem Hinzufügen eines neuen Befehles die Startseite wieder angezeigt wird sollten wir den Teil, den wir im zweiten Artikel in die Funktion „onCreate“ geschrieben haben in eine neue Funktion „zeigeStart“ verschoben werden. Zusätzlich muss an der alten Stelle des Codes in „onCreate“ nun „zeigeStart();“ stehen.
Sie sieht etwas so aus:

@Override
protected void onCreate(Bundle savedInstanceState) {

    [...]

    zeigeStart();
}

// Zeige die Startseite an.
public void zeigeStart(){
    setContentView(R.layout.activity_main);

    // Datenbank initialisieren.
    DB_Befehle DB_b = new DB_Befehle(this);

    // Alle Befehle aus der Datenbak auslesen und in eine Variable schreiben.
    ArrayList<Befehl> befehlsListe = DB_b.getAlle();

    // Adapter mit allen gefundenen Befehlen der Datenbank füttern.
    BefehlsAdapter befehlsAdapter = new BefehlsAdapter(this, befehlsListe);

    // Adapter auf das ListView aufschalten.
    ListView liedListView = (ListView)findViewById(R.id.befehlsliste);
    liedListView.setAdapter(befehlsAdapter);
}

Marvin

Ich bin 23 Jahre jung und studiere zurzeit Wirtschaftsinformatik an der Georg-August-Universität in Göttingen. Ich bin ein Mensch, der sich neben der Programmierung noch für tausend andere Dinge interessiert, die mal mehr und mal weniger verrückt sind. Vor allem aber bin ich Feuer und Flamme mit der Programmierung von eigenen kleinen Apps und Programmen, die mein Leben bereichern.

Kommentar hinzufügen

*Pflichtfeld