ListView oder DB in JSON, XML oder TXT umwandeln,versenden - Android Studio

  • Antworten:8
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 8

14.01.2018, 19:30:32 via Website

Ich möchte gerne meine DB bzw. meine Daten in der ListView verschicken. Daher wollte ich diese Daten umwandeln in JSON, XML oder TXT.

Ist dies überhaupt möglich oder gibvt es vllt eine andere Methode Daten per E-Mail zu verschicken?

Finde im Internet leider nur die andere Seite aus JSON oder CSV lesen, aber ich möchte es umgekehrt machen.
Und Bitte nicht sagen "Steck dein Handy an den Rechner an" haha .

Beste Grüße
Stefan

Antworten
  • Forum-Beiträge: 2.902

14.01.2018, 19:34:49 via Website

Hallo Stefan,

deine Listview-Daten sind doch sehrwahrscheinlich in einem Array.

Was hindert dich daran , dir daraus jegliches erdenkliche Datenformat zu erstellen und es
per Email als Anhang zu generieren ?

— geändert am 14.01.2018, 19:46:50

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

Antworten
  • Forum-Beiträge: 8

15.01.2018, 10:58:02 via Website

 Button btnTXT = (Button) findViewById(R.id.txt);

    btnTXT.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {

            String filename = "myfile.txt";


            List<HealthMemo> test = dataSource.getAllHealthMemos();
            String[] numbers = test.toArray(new String[0]);


            FileOutputStream outputStream ;
            File file;

            try {
                file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), filename);
                outputStream = new FileOutputStream(file);
                //outputStream = openFileOutput(filename, Context.MODE_APPEND);
                for (String s : numbers) {
                    outputStream.write(s.getBytes());
                }
                outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

            getApplicationContext().getFilesDir();

        }
    });

Hier versuch ich eine Methode aufzurufen die mir eine ArrayList zurück gibt und dan in ein Array umwandelt.
Leider schließt sich die App wenn ich den Button drücke.

hier noch die Methode

public List<HealthMemo> getAllHealthMemos() {
    List<HealthMemo> appMemoList = new ArrayList<>();

    Cursor cursor = database.query(HealthMemoDbHelper.TABLE_HEALTH_LIST,
            columns, null, null, null, null, null);

    cursor.moveToFirst();
    HealthMemo appMemo;

    while(!cursor.isAfterLast()) {
        appMemo = cursorToAppMemo(cursor);
        appMemoList.add(appMemo);
        Log.d(LOG_TAG, "ID: " + appMemo.getId() + ", Inhalt: " + appMemo.toString());
        cursor.moveToNext();
    }

    cursor.close();

    return appMemoList;
}

Antworten
  • Forum-Beiträge: 2.902

15.01.2018, 11:05:05 via Website

Was sagt denn dein ErrorLog ( LogCat) an welcher Stelle ?

Ohne den können wir schlecht helfen ( und du dir selbst auch nicht)

P.S Eine Fehlerbehandlung bei ungültigem Cursor wäre hilfreich (try/catch)

— geändert am 15.01.2018, 11:45:49

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

Antworten
  • Forum-Beiträge: 8

16.01.2018, 19:34:08 via Website

Nach dem ich auf den Button drücke das er mir eine Textfile erstellen soll wird die App geschlossen und bekom folgenden Fehler

01-16 19:32:50.958 19935-19935/de.programmierenlernenhq.health E/AndroidRuntime: FATAL EXCEPTION: main
Process: de.programmierenlernenhq.health, PID: 19935
java.lang.NullPointerException: Attempt to invoke virtual method 'java.util.List de.programmierenlernenhq.health.HealtMemoDataSource.getAllHealthMemos()' on a null object reference
at de.programmierenlernenhq.health.MainActivity$3.onClick(MainActivity.java:79)
at android.view.View.performClick(View.java:4856)
at android.view.View$PerformClick.run(View.java:19956)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5389)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)

Werd daraus leider nicht schlau.

Antworten
  • Forum-Beiträge: 2.902

16.01.2018, 20:53:22 via Website

de.programmierenlernenhq.health.HealtMemoDataSource.getAllHealthMemos()' on a null object reference
at de.programmierenlernenhq.health.MainActivity$3.onClick(MainActivity.java:79)

 List<HealthMemo> test = dataSource.getAllHealthMemos();

Ergibt : "datasource" ist ungültig/NULL

— geändert am 16.01.2018, 22:16:56

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

Antworten
  • Forum-Beiträge: 8

18.01.2018, 19:58:19 via Website

habs geschaft mit der Datasorce leider bekom ich jetzt folgenden Fehler

java.lang.ArrayStoreException: source[0] of type de.programmierenlernenhq.health.HealthMemo cannot be stored in destination array of type java.lang.String[]

hört sich an als ob ich die ArrayList von Objekten nicht in ein ArrayString wandeln kann?!

Antworten
  • Forum-Beiträge: 2.902

18.01.2018, 23:46:24 via Website

Dann sind deine Arraylist Typen unterschiedlich , das sagt schon die Fehlermeldung.

Und Objekte kann man nicht so einfach in einen bestimmten Datentype wandeln/zuweisen.
Entweder richtig casten oder gleiche Typen verwenden.

Da du uns aber hier nur Fragmente deines Source lieferst, musst du schon selbst danach schauen.
"HealthMemo" ist uns gänzlich unbekannt und der Tabellenaufbau auch.
Dann wäre es auch schön , bei Fehlermeldungen die entsprechende CodeZeile einsehen zu können.

P.S kann es sein , dass du eben versuchst ein Tutorial / Video mit wenig fundierten Kenntnissen
umzusetzen ? Du stellst sehr viele Grundfragen, die eigentlich im Vorfeld sitzen müssten.

— geändert am 19.01.2018, 10:06:15

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

Antworten
  • Forum-Beiträge: 8

19.01.2018, 15:55:26 via Website

So habs anderst gemacht hier mal der funktionierende:

@Override
        public void onClick(View view) {



            String inhalt ="";
            String filename = "myfile.txt";


            List<HealthMemo> test = dataSource.getAllHealthMemos();

            for (HealthMemo m : test ){
                String s = m.toString();
                inhalt = inhalt + s;
            }


            FileOutputStream outputStream ;
            File file;

            try {
                file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), filename);
                outputStream = new FileOutputStream(file);
                //outputStream = openFileOutput(filename, Context.MODE_APPEND);

                    outputStream.write(inhalt.getBytes());

                outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }

Noch zu deiner Frage, ja ich hab Tutorials nachgebaut und meinen Anforderungen angepasst.

Antworten

Empfohlene Artikel