Activity schließt sich bei Passwort FILE auslesen

B

berndschneider

Neues Mitglied
0
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";
}
 
existiert denn das file überhaupt ?
 
Ich denke ob das FILE existiert fängt er in der catch ab oder liege ich da falsch?
 
jap - wo sollte denn deiner meinung nach die file liegen ?

falls auf der sd karte => berechtigungen gesetzt ?
 
  • Danke
Reaktionen: berndschneider
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.
}

}
 
ja rufst sie denn irgendwo auf auch ?

ich kapier nicht ganz wo das problem ist.


btw: java coding standard nutzen erleichtert die lesbarkeit
 
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
 
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.
 
  • Danke
Reaktionen: berndschneider
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
 
pseudocode

if firststart
start password input activity
 
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();
}
 

Ähnliche Themen

H
Antworten
2
Aufrufe
1.311
Hcman
H
M
Antworten
3
Aufrufe
166
moin
M
D
Antworten
17
Aufrufe
408
datNeMo
D
Zurück
Oben Unten