1. Nimm jetzt an unserem Uhans - 3. ADVENT - Gewinnspiel teil - Alle Informationen findest Du hier!

Activity schließt sich bei Passwort FILE auslesen

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von berndschneider, 13.04.2012.

  1. berndschneider, 13.04.2012 #1
    berndschneider

    berndschneider Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2012
    Hallo Leute,

    ich habe da folgendes Problem. In einer Activity möchte ich ein Passwort FILE auslesen, jedoch stürzt die App ab. Ich glaube er findet das "SECRET" FILE nicht(laut logcat). Kann mit jemand helfen?

    Hier der CODE in Kürze:

    Hier Auszug der onCreate()-Methode der aufrufenden Activity
    Secret secret;
    String inhalt;
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.login_activity);

    secret = new Secret(this);
    inhalt=secret.passwortAuslesen();//HIER der Aufruf
    .
    .
    .//usw
    }

    In der Klasse Secret.java ist folgende Methode definiert

    boolean read =false;

    String passwortAuslesen() {

    FileInputStream fin = null;

    try {
    fin = context.openFileInput(FILENAME);
    byte[] dataArray = new byte[fin.available()];
    while (fin.read(dataArray) != -1) {
    collected = new String(dataArray);//fin.read();

    }
    read=true; // wenn es geklappt hat
    } catch (FileNotFoundException e) {
    e.printStackTrace();
    } catch (IOException e) {
    e.printStackTrace();
    } finally {
    if(fin!=null){
    try {
    fin.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }}
    if(read)
    return collected;
    else
    return "LESEFEHLER";
    }
     
  2. swordi, 13.04.2012 #2
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    existiert denn das file überhaupt ?
     
  3. berndschneider, 13.04.2012 #3
    berndschneider

    berndschneider Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2012
    Ich denke ob das FILE existiert fängt er in der catch ab oder liege ich da falsch?
     
  4. swordi, 13.04.2012 #4
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    jap - wo sollte denn deiner meinung nach die file liegen ?

    falls auf der sd karte => berechtigungen gesetzt ?
     
    berndschneider bedankt sich.
  5. berndschneider, 13.04.2012 #5
    berndschneider

    berndschneider Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2012
    hi swordi, danke erstmal für deine hilfe!!!:smile:

    ich arbeite zum ersten mal mit files ind android.

    Data Storage | Android Developers

    hatte ich mir durchgelesen.

    ok folgende methode benutze ich zum Schreiben in ein FILE. aber wenn ich die activity zum ersten mal auf das device aufspiele wurde diese methode noch nie benutzt. haste ne idee? ich hänge seit paar stunden beim debuggen

    sie liegt auch in der Secret.java

    /*Passwort setzen*/
    void passwortSchreiben(String EINGABE){
    try {
    FileOutputStream fos = context.openFileOutput(FILENAME, Context.MODE_PRIVATE);
    fos.write(EINGABE.getBytes());
    fos.close();
    Toast.makeText(context, "Passwort erfolgreich erneuert!" , Toast.LENGTH_SHORT).show();
    //Toast.makeText(b.getContext(), "Passwort erfolgreich erneuert!" , Toast.LENGTH_SHORT).show();
    } catch (FileNotFoundException e) {
    e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    } catch (IOException e) {
    e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
    }

    }
     
  6. swordi, 13.04.2012 #6
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    ja rufst sie denn irgendwo auf auch ?

    ich kapier nicht ganz wo das problem ist.


    btw: java coding standard nutzen erleichtert die lesbarkeit
     
  7. berndschneider, 13.04.2012 #7
    berndschneider

    berndschneider Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2012
    Ok ich erläuter ess dir kurz.

    die Activity, die gestartet wird ist die LoginActivity.java.
    Durch einen Intent kommt man in die SetPWActivity.java.

    In der SetPWActivity.java wird die Methode passwortSchreiben(...) aufgerufen.

    Jedoch bevor passwortSchreiben(...) jemals aufgerufen wird, wird schon in der LoginActivity.java passwortAuslesen() aufgerufen.

    Für den Fall dass er das FILE nicht findet ,(was ja auch beim ersten aufruf der fall sein wird) dienen mir doch die catch blöcke...

    Hab ich nen denkfehler? Danke schonmal
     
  8. swordi, 13.04.2012 #8
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    nein ist ok

    setzt dir einfach ne sharedpreference für den ersten start.

    wenns der erste start ist, braucht er ja das passwort nicht lesen - einfach direkt zur passwort eingabe springen

    das passwort muss er ja generell erst nach der passworteingabe lesen. vorher ist das ja sowieso noch unnötig.
     
    berndschneider bedankt sich.
  9. berndschneider, 13.04.2012 #9
    berndschneider

    berndschneider Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2012
    gut ich zieh mir da die doku in android rein zu sharedpreference.

    Also haste nen kleinen codeschnippsel? nur um den bug zu lösen damit ich weiter machen kann.
    also wenn LoginActivity zum ersten mal gestartet wird. springe zu SetPWActivity.java
     
  10. swordi, 13.04.2012 #10
    swordi

    swordi Gewerbliches Mitglied

    Beiträge:
    3,389
    Erhaltene Danke:
    441
    Registriert seit:
    09.05.2009
    pseudocode

    if firststart
    start password input activity
     
  11. berndschneider, 13.04.2012 #11
    berndschneider

    berndschneider Threadstarter Neuer Benutzer

    Beiträge:
    19
    Erhaltene Danke:
    0
    Registriert seit:
    19.03.2012
    ich glaub es funzt:smile:) danke

    hier die funktionen die ich in die Activity1 schreibe bzw dort definiere:
    SharedPreferences mPrefs;
    /**
    * get if this is the first run
    *
    * @return returns true, if this is the first run
    */
    public boolean getFirstRun() {
    return mPrefs.getBoolean("firstRun", true);
    }

    /**
    * store the first run
    */
    public void setRunned() {
    SharedPreferences.Editor edit = mPrefs.edit();
    edit.putBoolean("firstRun", false);
    edit.commit();
    }



    /**
    * setting up preferences storage
    */
    public void firstRunPreferences() {
    Context mContext = this.getApplicationContext();
    mPrefs = mContext.getSharedPreferences("myAppPrefs", 0);
    }



    in Activity1 schreib ich in der onCreate()

    firstRunPreferences();

    if(getFirstRun()){
    Intent intent = new Intent(Activity1.this, Activity2.class);
    startActivity(intent);
    setRunned(); }

    else{// wenn nicht mehr 1. Lauf
    secret = new Secret(this);
    collected=secret.passwortAuslesen();
    }
     

Diese Seite empfehlen