openFileOutput - NullPointerException

  • Antworten:3
David K.
  • Forum-Beiträge: 2

07.10.2014, 10:10:07 via Website

Hallo,
bin noch blutiger Anfänger in Java und Android SDK und habe auch schon das erste Problem. Vielleicht kann mir jemand helfen?

Ich möchte die Datei "user.txt" auslesen. Wenn ich das auslesen in der Mainklasse vornehme funktioniert es wunderbar, aber wenn ich es in die Klasse FilestreamClass auslagern möchte geht garnichts mehr und er zeigt eine "java.lang.NullPointerException"

Kann mir jemand helfen?? Danke im Voraus ... Viele Grüße Dave

Hier der Code...

MainActivity:

public class MainActivity extends ActionBarActivity {


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

    FilestreamClass fsi = new FilestreamClass();
    String testout = fsi.doInput();

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);

}

// Hier die FilestreamClass ---

import java.io.FileInputStream;

public class FilestreamClass extends MainActivity {

public String output;
String filename = "userid.txt";
FileInputStream fis;

public String doInput(){

    try {
        fis = openFileInput(filename);
    output = fis.read();
        fis.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        return "FEHLER: " + e.toString();
    }
    return "OK: " + output; 
}

}

— geändert am 07.10.2014, 10:11:38

Antworten
Fabian Simon
  • Forum-Beiträge: 359

07.10.2014, 13:26:35 via Website

oh gott oh gott...
Ähm das weiß ich garnicht wo ich anfangen soll ....

public class FilestreamClass extends MainActivity

Das kann nicht das sein was du willst.
Siehe hier zu http://de.wikipedia.org/wiki/Vererbung_%28Programmierung%29
Führe dir das mal zu herzen...
Das öffnen sollte auch über eine Referenz (http://de.wikipedia.org/wiki/Referenz_%28Programmierung%29) möglich sein.

Gruß

Antworten
David K.
  • Forum-Beiträge: 2

07.10.2014, 14:50:50 via Website

Wenn ich die Vererbung weg nehme, erhalte ich den Fehler:

"The method openFileInput(String) is undefined for the type FilestreamClass"

... nun habe ich aber einfach statt dem "extends MainActivity" ein "extends ContextWrapper" und ein Konstruktor für FileStreamClass angelegt. Nun scheint alles zu funktioniert. Hoffe das ist der richtige Weg (thinking)

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

07.10.2014, 17:13:43 via Website

Hallo David,
Herzlich wilkommen hier im Forum :)

Deine Methode ist nicht wirklich richtig.
Wenn du die Grundlagen kennst (was ich gerade nicht glaube) müsstest du wissen, wie eine normale Klasse aufgebaut ist.
Bei einer normale einfachen Klasse musst du garnicht an Vererbung etc. denken.
Da schaust du die lieber die Methoden und die Benutzung eines FileInputStreams an.
Richtig würde deine 2. Klasse so aussehen:

import java.io.FileInputStream;

public class FilestreamClass  {

public String output;
String filename = "userid.txt";
FileInputStream fis;

public String doInput(){


    try {
        fis =  new FileInputStream(filename);
    output = String.valueOf(fis.read()); //Hier wird nur 1Byte als integer gelesen! ich denke nicht, dass es das ist was du willst
        fis.close();
    } catch (Exception e) {
        // TODO Auto-generated catch block
        return "FEHLER: " + e.toString();
    }
    return "OK: " + output; 
}

}

Wenn du einen File lesen willst, solltest du dir lieber mal dieses Tutorial anschauen.: http://www.java-samples.com/showtutorial.php?tutorialid=1522

LG Pascal

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

Antworten