Textdatei auf SD Karte auslesen funktioniert nicht (Oneplus One)

lordzwieback

lordzwieback

Erfahrenes Mitglied
210
Hallo,

ich bin neu in der Welt der App Programmierung und wollte nun meine erste kleine "App" schreiben. Auf der Activity sitzen ein Button und ein TextView. Der Button soll die Textdatei öffnen und den Inhalt in das TextView übernehmen.

Hier der Code:
Code:
package com.example.rling.stark_inspektion;

import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import android.widget.Button;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.Scanner;

public class MainActivity extends AppCompatActivity {
    private Button importButton;
    private TextView filetext;


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

        importButton = (Button) findViewById(R.id.import_button);
        filetext = (TextView) findViewById(R.id.textView);

        importButton.setText(R.string.import_button);

        importButton.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                File sdcard = Environment.getExternalStorageDirectory();
                File file =  new File(sdcard, "/Download/testfile.txt");

                if(file.exists()) {
                    //filetext.setText("File exists\n");
                    StringBuilder text = new StringBuilder();
                    try {
                        BufferedReader br = new BufferedReader(new FileReader(file));
                        String line;

                        while((line = br.readLine()) != null) {
                            text.append(line);
                            text.append("\n");
                            System.out.println(line);
                        }
                    }catch (Exception e) {

                    }
                    System.out.println(text);
                    filetext.setText(text);
                } else {
                    filetext.setText("File not found.");
                }
            }
        });

    }
}

Zum Problem:
Lasse ich mir per System.out.println("File vorhanden") nach if(file.exists() ausgeben, funktioniert das. Das heißt für mich, dass er die Datei auf der SD findet.

Nur leider wird kein Text in den StringBuider "text" übergeben. Wenn ich mir "line" bzw. "text" per System.out.println() anzeigen lassen möchte, ist nichts drin. Im TextView erscheint dementsprechend auch nichts. Leider kann ich den Fehler nicht finden. Mehrere Tutorials schlagen mir aber diesen Code vor.

Was ich noch probiert habe, ist die Permission fürs Lesen von externen Speichermedien zu setzen:

Code:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>

Das hat aber auch nichts geholfen.

Hoffe, man kann mir weiterhelfen :)


Gruß,
lordzwieback
 
Hallo Lord ,

ich gehe mal davon aus, das dein filehandle gültig ist, also die datei auch wirklich existiert und auch geöffnet wird.

schreib doch mal das hier

catch (Exception e)
{

}

in
catch (Exception e)
{

System.out.println(e.toString());
}

um

Ich gehe davon aus , dass dir da dann ein Fehler auftaucht ..

2) Möglichkeit

Du liest die Datei Zeilenorientiert (reaLine)
Stelle hierzu sicher , das s mehr als eine Zeile - abgeschlossen mit einen CRLF sich in der txt befindet

lg
Stefan
 
@swa00 hallo, danke für deine Hilfe. Werde es morgen früh testen und Rückmeldung geben.
 
@swa00 Folgende Fehlermeldung erscheint:
I/System.out: java.io.FileNotFoundException: /storage/emulated/0/Download/testfile.txt: open failed: EACCES (Permission denied)

Was diese besagt ist mir auch klar, aber ich vertehe nicht, wieso sie auftaucht. Ich habe die Permission explizit nochmal in der Manifest Datei eingestellt.
 
@lordzwieack

zwei möglichkeiten :

1)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>

2) Android M ( 6.x) ??
Berechtigung manuell vergeben ???

lg
Stefan
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: lordzwieback
@swa00 Das mit READ und WRITE habe ich schon getestet. Ja, Oneplus One mit 6.0.1. Wie vergebe ich die manuell?

EDIT: Ich konnte das Problem lösen, App Einstellungen, bei Berechtigung "Speicher" aktiviert, funktioniert super. Danke für die Hilfe.
 
Zuletzt bearbeitet:
Manchmal sind es nur DAU - Klicks , die zum Erfolg führen :)

Viel Erfolg
 
@swa00 Das ist doch aber komisch, dass man das nicht per Code einstellen kann oder? Muss das der Endanwender dann auch erst einstellen?
 
Das ist das Sicherheitskonzept von Android ab 6.x.

Natürlich kannst du mittels Code beim ersten Start der App die Berechtigungen überprüfen und dem User die Möglichkeit geben
dies zu erlauben .

Android M User Permission Error - READ and WRITE
 
@swa00 Ah okay, da sollte dann ein Dialog erscheinen, etwa "App XY möchte auf ihre Daten auf SD zugreifen - Erlauben / Verbieten... oder? Das kenne ich von meinem Spartphone aus schon.
 
Richtig , je nach Code , gelangst du dann direkt in die Berechtigungs - Einstellungen der App ..
Auf Wunsch kann man dann selbst noch eine Box davor schalten , damit der User auch weis , was jetzt passieren wird ...

Würde ich empfehlen , sonst verwirrt es
 
@swa00 Alles klar, ich denk ich bau jetzt erstmal das richtige Gerüst für die gewollte App auf und schaue, wie weit ich zurecht komme. (Bisher wars ja nur ein Test) Ich denke, dass ich mich während der Entwicklung sicherlich hier nochmal melden werde/muss. :D Aber jedenfalls schonmal danke für deine Hilfe.
 
Gern geschehen :)
 

Ähnliche Themen

H
Antworten
2
Aufrufe
1.309
Hcman
H
netfreak
  • netfreak
Antworten
10
Aufrufe
456
netfreak
netfreak
M
  • MikelKatzengreis
Antworten
5
Aufrufe
126
swa00
swa00
Zurück
Oben Unten