Speichern ohne Shared Preferences

  • Antworten:23
Jordi Müller
  • Forum-Beiträge: 29

09.08.2016, 16:16:28 via Website

Hallo Leute,
inzwischen habe ich meine App mit Shared Preferences programmiert, jedoch finde ich das es eine elegantere Lösung gibt als immer auf den Speichern/Laden und Löschen Knopf zu drücken. Daher würde ich mich sehr freuen wenn ihr alternative Möglichkeiten hättet die Eingegebenen Daten zu speichern.
Vielen Dank im Vorraus
LG:D

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

09.08.2016, 16:22:45 via App

Anstatt shared preferences gibt es noch die alternative einen File zu schreiben oder eine DB etc..
Aber das mit dem Laden Löschrn und Speichern button ist ja eine Eigenart des Programmierens. Wenn du Eventgesteuert Programmierst brauchst du z.b. eine speichern button nicht da die App änderungen erkennt und selber in die speichern Methode springt.

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

Jordi Müller

Antworten
Jordi Müller
  • Forum-Beiträge: 29

09.08.2016, 17:31:35 via Website

Ah,super also werde ich jetzt Eventgesteuert programmieren, danach habe ich gesucht dankeschön.
LG:D

Antworten
Jordi Müller
  • Forum-Beiträge: 29

09.08.2016, 17:34:01 via Website

Noch eine Frage könntest du mir eventuell ein Tutorial dazu empfehlen das das Eventgesteuerte Programmieren bei Android Studio erklärt?

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

09.08.2016, 17:49:13 via App

Das hier ist für dein Vorhaben glabe ich etwas zu hoch gegriffen:
https://medium.com/google-developer-experts/event-driven-programming-for-android-part-i-f5ea4a3c4eab#.f5q2qyy19

Ansonsten einfach EditText events auswerten z.b. wenn das element verlassen wird bzw. der focus verloren geht dann speichern.
Weiss leider gerade nicht welchr Methode mit welchen Callback das ist...

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

Jordi Müller

Antworten
Rafael K.
  • Forum-Beiträge: 2.359

10.08.2016, 12:01:15 via Website

Es gibt inzwischen auch die Möglichkeit Views mit Daten explizit zu koppeln.
Der ganze Boiler-Plate Code des Ladens/Speicherns wird dann von der Plattform übernommen.

https://developer.android.com/topic/libraries/data-binding/index.html

Ludyswa00Jordi Müller

Antworten
Jordi Müller
  • Forum-Beiträge: 29

10.08.2016, 15:13:07 via Website

Hallo zusammen,
könnt ihr mir auch ein Tutorial empfehlen das die ganze Sache etwas genauer erklärt?
Ich würde gerne die Methode von Pascal P. verwenden, weiss aber nicht nach was genau ich im Internet suchen sollte.
Vielen Dank für eure Hilfe.
LG :D

Antworten
swa00
  • Forum-Beiträge: 3.704

10.08.2016, 15:37:19 via Website

Hallo Jordi,

das Beispiel von Pascal, wie auch die Möglichkeit von Rafael sind schon ziemlich gut beschrieben.
Bei Pascals Beispiel, werden bestimmte Ereignisse auch über einen Service vorgenommen.
.
.
Es könnte auch z.b. ein Broadcast sein, oder Listener, die du aus einer Klasse her generierst - ohne service.

Du musst Dich also als erstes mal damit auseinander setzen, wie und zu welchem Zeitpunkt man events/listener abfangen bzw.erstellen kann.

Ein absolut treffender Hinweis von Pascal war

Ansonsten einfach EditText events auswerten z.b. wenn das element verlassen wird bzw. der focus verloren geht dann speichern.

Dann kommst du schon weiter.

Schau mal hier :
http://stackoverflow.com/questions/8063439/android-edittext-finished-typing-event

— geändert am 10.08.2016, 16:12:59

Liebe Grüße - Stefan
[ App - Entwicklung ]

Ludy

Antworten
Hack8Full
  • Forum-Beiträge: 51

10.08.2016, 17:25:00 via Website

Hahahah, ich habe keine ahnung wovon ihr reden XD

Antworten
Ludy
  • Admin
  • Forum-Beiträge: 7.957

10.08.2016, 17:55:04 via App

Hallo Hack8Full,

wenn du es nicht weißt, kannst du dich einlesen. Wenn du kein Interesse daran hast, ignoriere einfach diesen Thread, sonst wird er unübersichtlich. Danke

Gruß Ludy (App Entwickler)

Mein Beitrag hat dir geholfen? Lass doch ein "Danke" da.☺

☕ Buy Me A Coffee ☕

Lebensmittelwarnung-App

✨Meine Wunschliste✨

📲Telegram NextPit News📲

Jordi Müllerswa00

Antworten
Jordi Müller
  • Forum-Beiträge: 29

12.08.2016, 19:51:40 via Website

image

Hallo zusammen, ich habe nach euren Tipps mal einen code geschrieben, der erkennt wann der Fokus des Benutzers verloren geht. Ich habe ihn ausprobiert aber es is nichts passiert. Erkennt ihr einen Fehler?
Vielen Dank im Vorraus
LG:D

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

12.08.2016, 21:12:00 via App

  1. Poste den Code bitte als Text Screenshots lassen sich (gerade aus der App) schlecht lesen..
  2. Was soll denn auch groß passieren, bisher hast du in dem Action block ja nur Ifs und returns drin aber keine Toast Ausgabe oder log oder ähnliches bzw. denn speichern.

Aber schau dir mal das an:
http://stackoverflow.com/a/10627231
Sollte eigentlich reichen.

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

Antworten
Jordi Müller
  • Forum-Beiträge: 29

13.08.2016, 01:23:22 via Website

Hallo, besser so?

package com.example.jordi.hallo;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import com.example.jordi.hallo.R;

public class MainActivity extends Activity implements View.OnFocusChangeListener {

editTextReaserch.setOnFocusChangeListener(this);
editTextMyWords.setOnFocusChangeListener(this);
editTextPhone.setOnFocusChangeListener(this);

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);





    View.OnFocusChangeListener foco = new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub

        }
    };

    EditText txtEdit = (EditText) findViewById(R.id.edittxt);

    txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                // code to execute when EditText loses focus
            }
        }
    });


    @Override
    public void onFocusChange (View v,boolean hasFocus){
        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }
        if (!hasFocus) {
            editTextReaserch.setText("BlaBlaBla");
            editTextMyWords.setText(" One Two Tree!");
            editTextPhone.setText("\"your phone here:\"");
        }
    }
}

}

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

13.08.2016, 08:58:51 via Website

Beispielsweise.
Das sollte doch jetzt gehen oder?
Etwas viel überflüssiger Code. Aber jetzt müsstest du das Event für jede View / EditText machen und den eigenegenen Wert speichern.
Das sollte dann alles sein.

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

Jordi Müller

Antworten
Jordi Müller
  • Forum-Beiträge: 29

13.08.2016, 17:04:37 via Website

ok, danke :D !

Antworten
Jordi Müller
  • Forum-Beiträge: 29

13.08.2016, 22:40:17 via Website

Eine Frage hätte ich noch, was genau bezweckt dieser Teil des Codes?
Danke im Vorraus :D Das Problem dabei ist das es rot makiert ist und ich es nicht implementieren kann.
LG :D

editTextReaserch.setOnFocusChangeListener(this);
editTextMyWords.setOnFocusChangeListener(this);
editTextPhone.setOnFocusChangeListener(this);

@Override
public void onFocusChange (View v,boolean hasFocus){
if (hasFocus) {
editTextReaserch.setText("");
editTextMyWords.setText("");
editTextPhone.setText("");

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

13.08.2016, 22:46:57 via App

Du hast es Programmiert. Wen du nicht weiss was es macht, dann hast du was grundlegendes nicht verstanden.
Du solltest dir die Grundlagen nochmal anschauen und die Docu dazu lesen.

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

Jordi Müllerswa00

Antworten
swa00
  • Forum-Beiträge: 3.704

14.08.2016, 09:38:58 via Website

Hallo Jordi,

vorab finde ich es begrüssenswert , wenn ein junger Mensch hingeht und seine Freizeit mit so einem Thema
verbringt .

Allerdings muss ich Pascal an dem Punkt recht geben - Das scheint bei allen Anfängern so zu sein :

Es nutzt gar nichts , sich jede Menge Youtube videos anzuschauen und foren zu lesen und die vermeidliche Lösung mit Copy & Paste in sein Programm einzupflegen und stundenlang nach einer "hoffentlich" funktionierenden Version zu suchen - in dieser vorgehensweise seid ihr nämlich Meister des Klicks :-)

Man (n) muss einfach verstehen , was man da tut , das sollte jeder Handwerker tun und dazu gehören
GRUNDLAGEN - das A & O der Programmierung

Ergo :
Lest ein Buch/Tutorial und "erlernt" erst das , was ihr machen möchtet - und genau das wollt ihr nämlich nicht hören :-)

Vielleicht nur mal eine kleine Anmerkung :
Die Beantwortung solcher Fragen ist eine freiwillige Angelegenheit, nimmt Zeit in Anspruch und wird gerne gemacht.
Aber du solltest auch wissen , dass es schon ein wenig frustrierend ist, wenn man dann das Gefühl bekommt,
dort möchte nur jemand erst mal etwas vorgekaut bekommen , weil er schlichtweg keine Lust hat, sich einzulesen .

Das ist nicht gerade fair Jordi, Pascal hat von Dir nicht einmal einen schlichten "Danke" Klick bekommen und Du verballerst die Bereitwilligkeit und Freizeit eines "Profis" für User, die wirklich Hilfe benötigen.
.
Denke bitte einmal darüber nach.

.
.

Falls du doch etwas zum Lesen haben möchtest - Vielleicht bist du ja eine Ausnahme

Hier ein paar hilfreiche links :

http://www.tutorialspoint.com/android/
https://developer.android.com/training/index.html

Und java allgemein
http://openbook.rheinwerk-verlag.de/javainsel/

— geändert am 14.08.2016, 11:57:56

Liebe Grüße - Stefan
[ App - Entwicklung ]

Jordi MüllerPascal P.

Antworten
Jordi Müller
  • Forum-Beiträge: 29

14.08.2016, 12:03:13 via Website

Hallo zusammen,
ich habe mir jetzt eine App gedownloadet in der die Grundkentnisse von Java enthalten sind. Ihr hattet recht das man sich erst die Grundkentnisse aneignen sollte.
Trotzdem will ich nebenher den Code schreiben und habe jetzt für jedes Event meinen EditText geschrieben
Danke im Vorraus :D
Speziell an dich Pascal P. DANKE!

package com.example.jordi.hallo;

import android.app.Activity;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.EditorInfo;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import com.example.jordi.hallo.R;

public class Shops extends Activity implements View.OnFocusChangeListener{

editTextReaserch.setOnFocusChangeListener(this);
editTextMyWords.setOnFocusChangeListener(this);
editTextPhone.setOnFocusChangeListener(this);

@Override
protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);





    View.OnFocusChangeListener foco = new View.OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            // TODO Auto-generated method stub

        }
    };

    EditText txtEdit = (EditText) findViewById(R.id.edittxt);

    txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                // code to execute when EditText loses focus
            }
        }
    });

    EditText et2 = (EditText) findViewById(R.id.et2);

    txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                // code to execute when EditText loses focus
            }
        }
    });

    EditText et3 = (EditText) findViewById(R.id.et3);

    txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                // code to execute when EditText loses focus
            }
        }
    });

    EditText et4 = (EditText) findViewById(R.id.et4);

    txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                // code to execute when EditText loses focus
            }
        }
    });

    EditText et5 = (EditText) findViewById(R.id.et5);

    txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                // code to execute when EditText loses focus
            }
        }
    });

    EditText et6 = (EditText) findViewById(R.id.et6);

    txtEdit.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {
                // code to execute when EditText loses focus
            }
        }
    });


    @Override
    public void onFocusChange (View v,boolean hasFocus){
        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }
        if (!hasFocus) {
            editTextReaserch.setText("BlaBlaBla");
            editTextMyWords.setText(" One Two Tree!");
            editTextPhone.setText("\"your phone here:\"");
        }

        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }

        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }

        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }

        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }

        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }

        if (hasFocus) {
            editTextReaserch.setText("");
            editTextMyWords.setText("");
            editTextPhone.setText("");
        }




    }
}
}

Antworten
swa00
  • Forum-Beiträge: 3.704

14.08.2016, 13:06:55 via Website

Hallo Jordi,

du machst noch einige Fehler :

a) Jedem Textedit kannst du einen setonFocusCHangeListener beifügen , dass ist schon mal richtig ...
b) es gibt zwar noch "effektivere" Wege , das Ganze zu realisieren , aber ich bleibe BEWUSST bei deinem Beispiel, um dich nicht zu verwirren
c) In deinem Quellcode hast du das ein paar mal drin , setzt aber immer den Listener für ein und das gleiche textedit - und zwar nur für txtEdit

Wenn du also das JEDEM Textedit zuweisen willst , dann musst du das auch bei JEDEM unterschiedlich tun
z.b.

EditText et1 = (EditText) findViewById(R.id.et1);
et1.setOnFocusChangeListener(new View.OnFocusChangeListener() {
EditText et2 = (EditText) findViewById(R.id.et2);
et2.setOnFocusChangeListener(new View.OnFocusChangeListener() {

Des weitern fragst du nur die intern "hasFocus" ab , fragst aber später extra in ( OnFocusChange <- der ist unnötig) ab , ob diese true oder false ist.

Denkaufgabe : Woher soll der extra OnFocusChange wissen WELCHER edittext diese Variable true/false gesetzt hat ???

So wie dein Code ist , geht es auch nicht ..

erstens leitst du einen Listener in deiner Mainactivity ab (implements)

dann setzt du nochmal (falsch) einen changelistener auf die textedits drauf und dann nochmal auf einen View

Lass das abgleitet erste mal weg , den auf das View auch weg, setze JE textedit einen unterschiedlichen TextListener (s.o) und reagierts jeweils auf diesen in der @override onFocusChange

— geändert am 14.08.2016, 14:03:43

Liebe Grüße - Stefan
[ App - Entwicklung ]

Jordi Müller

Antworten
swa00
  • Forum-Beiträge: 3.704

14.08.2016, 14:02:22 via Website

Hier mal dein Ansatz :

public class Shops extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

EditText et2 = (EditText) findViewById(R.id.et2);

et2.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
    @Override
    public void onFocusChange(View v, boolean hasFocus)
   {
        if (!hasFocus)
       {
            // code to execute when EditText loses focus
        }
        else
        {
         editTextReaserch.setText("");
         editTextMyWords.setText("");
         editTextPhone.setText("");
        }
     }
});

}
}

Den Rest musst du aber jetzt selbst hinbekommen

— geändert am 14.08.2016, 14:02:43

Liebe Grüße - Stefan
[ App - Entwicklung ]

Jordi Müller

Antworten
Jordi Müller
  • Forum-Beiträge: 29

15.08.2016, 00:17:37 via Website

Danke für deine schnelle Antwort!
Hat mir sehr weiter geholfen, werde das morgen auch umsetzten :D
LG

Antworten
Jordi Müller
  • Forum-Beiträge: 29

15.08.2016, 00:41:43 via Website

Gut er funktioniert dankeschön :D
Lg

Antworten
swa00
  • Forum-Beiträge: 3.704

15.08.2016, 08:54:54 via Website

Bitte sehr .......

Viel Erfolg

Liebe Grüße - Stefan
[ App - Entwicklung ]

Jordi Müller

Antworten