115122
Goto Top

Textdatei auf SD Karte auslesen funktioniert nicht (Oneplus One)

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:
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:

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

Das hat aber auch nichts geholfen.

Hoffe, man kann mir weiterhelfen face-smile


Gruß,
lordzwieback

EDIT: Durch System out println habe ich herausgefunden, dass mit der Zeile "BufferedReader br...." etwas nicht stimmen kann. Da bleibt er hängen.

Content-Key: 313440

Url: https://administrator.de/contentid/313440

Printed on: April 23, 2024 at 13:04 o'clock

Member: tomolpi
tomolpi Aug 24, 2016 at 13:18:27 (UTC)
Goto Top
Hi,

Benutzt du Android Studio?
Wenn ja, setzte an den Stellen wo es hakt Breakpoints und schau dir im Debugger genau die Variablen und ihren Inhalt an.

Ansonsten können wir das auch per PN hier klären wenn es länger dauert.

LG,

tomolpi
Mitglied: 115122
115122 Aug 24, 2016 at 15:27:25 (UTC)
Goto Top
Das mit den Breakpoints werde ich morgen früh mal versuchen. Wenn ich dann nicht weiterkomme, nehme ich dein Angebot mit PN gerne in Anspruch.

Gruß
Mitglied: 115122
115122 Aug 25, 2016 at 05:57:11 (UTC)
Goto Top
Ich habe mir jetzt mal die exakte Exception ausgeben lassen.

java.io.FileNotFoundException: /storage/emulated/0/Download/testfile.txt: open failed: EACCES (Permission denied)

Die Permission habe ich aber im Manifest schon explizit gesetzt..
Mitglied: 115122
115122 Aug 25, 2016 at 06:50:41 (UTC)
Goto Top
Ich konnte das Problem lösen, App Einstellungen, bei Berechtigung "Speicher" aktiviert, funktioniert super. Danke für die Hilfe. Beim Android 6.X muss man das wohl explizit einstellen.