Context für FileWriter

  • Antworten:15
  • Bentwortet
.......
  • Forum-Beiträge: 408

12.06.2013, 21:07:46 via Website

Hallo liebes Forum,
Ich habe das Problem, dass ich mir einen File Writer und Reader gebastelt habe, da man aber zum speichern von datein den context braucht, und ich die datei in einer anderen Activity schreiben will als in der in der sie gelesen werden soll, funtkioniert das mit dem Context nicht.
Kann mir da jemand helfen ?

Es soll in einer AddActivity geschreiben werden und in einer anderen FirstActivtiy in der selben App ausgegeben werden.
(Namen der Activities sind erfunden xD)

Hier noch die Codes:
Von meiner FileWriter Klasse:

###################################################################

package MeineApp...

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

public class GFileManager {

public static String[] readFile(String filename){

File file=new File(FirstActivity.savepath+filename);
FileReader fr = null;
BufferedReader br;
String outputAsString = null;

try {

fr=new FileReader(file);

} catch (FileNotFoundException e) {

e.printStackTrace();

}

br=new BufferedReader(fr);

try {

outputAsString=br.readLine();

} catch (IOException e) {

e.printStackTrace();

}


String[] outputAsStringArray=outputAsString.split("]}-|-{[");

return outputAsStringArray;

}

public static void writeFile(String filename, String inputByUserAsString){
File file=new File(FirstActivity.savepath, filename);

String[] inputAsStringArray=readFile(filename);
String inputAsString=null;
FileWriter fw = null;
PrintWriter pw;

int i = 0;

while(i<inputAsStringArray.length){

if(inputAsString!=null){
inputAsString=inputAsString+inputAsStringArray[i]+"]}-|-{[";
}else{
inputAsString=inputAsStringArray[i]+"]}-|-{[";
}

i++;

}

inputAsString=inputAsString+inputByUserAsString+"]}-|-{[";


try {

fw=new FileWriter(file);

} catch (IOException e) {

e.printStackTrace();

}

pw=new PrintWriter(fw);

pw.print(inputAsString);

pw.close();
}

}
###################################################################

— geändert am 12.06.2013, 22:04:19

Antworten
Mac Systems
  • Forum-Beiträge: 1.727

12.06.2013, 23:12:47 via Website

Wenn dann übergebe den Application Context um nichts zu leaken.

Windmate HD, See you @ IO 14 , Worked on Wundercar, Glass V3, LG G Watch, Moto 360, Android TV

Antworten
.......
  • Forum-Beiträge: 408

13.06.2013, 15:04:03 via Website

Ich habe aber dann das Problem, dass meine Methode dann nicht static sein kann, sie muss aber static sein, sonst wird mir ein Fehler gezeigt, wenn ich sie ausführe

Beispiel:

String[] a=readFIle(Context,Filename);

Dann kommt de Fehler:
Cannot make a static reference to the non-static method readFile(String) from the type GFileManager

Antworten
impjor
  • Forum-Beiträge: 1.793

13.06.2013, 15:14:17 via App

Seltsam, woher kommt den jetzt die readFile(String) Methode in der Fehlermeldung? ( Müsste ja readFile(String, Context) sein)
Am besten du postes noch mal den kompletten Code, aber bitte zwischen [code] - Zeichen.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
Frank S.
  • Forum-Beiträge: 357

13.06.2013, 15:28:43 via Website

hm,mmm..

— geändert am 13.06.2013, 15:30:24

Bildung ist, was übrig bleibt, wenn man vergessen hat, was man gelernt hat. =)

Antworten
.......
  • Forum-Beiträge: 408

13.06.2013, 15:56:30 via Website

Ok hier ist jetzt der ganze Code:
[quote]package com.example.drawerselfmade;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;

import android.app.Activity;
import android.content.Context;

public class GFileManager extends Activity {

public String[] readFile(Context context,String filename){

File file=new File(context.getFilesDir(),filename);
FileReader fr = null;
BufferedReader br;
String outputAsString = null;

try {

fr=new FileReader(file);

} catch (FileNotFoundException e) {

e.printStackTrace();

}
br=new BufferedReader(fr);

try {

outputAsString=br.readLine();

} catch (IOException e) {

e.printStackTrace();

}


String[] outputAsStringArray=outputAsString.split("]}-|-{[");

return outputAsStringArray;

}

public static void writeFile(String filename, String inputByUserAsString, Context context){
File file=new File(context.getFilesDir(), filename);

String[] inputAsStringArray=readFile(context,filename);
String inputAsString=null;
FileWriter fw = null;
PrintWriter pw;

int i = 0;

while(i<inputAsStringArray.length){

if(inputAsString!=null){
inputAsString=inputAsString+inputAsStringArray[i]+"]}-|-{[";
}else{
inputAsString=inputAsStringArray[i]+"]}-|-{[";
}

i++;

}

inputAsString=inputAsString+inputByUserAsString+"]}-|-{[";


try {

fw=new FileWriter(file);

} catch (IOException e) {

e.printStackTrace();

}

pw=new PrintWriter(fw);

pw.print(inputAsString);

pw.close();
}

}
[/quote]

Der Fehler:
String[] inputAsStringArray=readFile(context,filename);
Kommt genau dieser Fehler als Meldung bei Eclipse:
Cannot make a static reference to the non-static method readFile(Context, String) from the type GFileManager
Als QuickFix wird mir das angezeigt:
Cnage modifier of readFile to static
Aber das geht ja nicht, sonst funktioniert das mit dem Context nicht mehr.

Antworten
impjor
  • Forum-Beiträge: 1.793

13.06.2013, 16:20:21 via App

Du musst aber readFile zu static machen, dann sollte alles klappen.

Gruß

Edit so:
1public static String[] readFile(Context context,String filename) {

— geändert am 13.06.2013, 16:22:13

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
.......
  • Forum-Beiträge: 408

13.06.2013, 16:34:16 via Website

Ok ich hab es jetzt static gemacht. aber meine AddActivity geht noch immer nicht.
Hier ist auch der Code:
package com.example.drawerselfmade;

import android.app.Activity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class AddActivity extends Activity {

Button buttonConfirm;

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

buttonConfirm=(Button) findViewById(R.id.ADD_ButtonConfirm);
buttonConfirm.setOnClickListener(buttonConfirmHandler);

}

OnClickListener buttonConfirmHandler=new OnClickListener(){

@Override
public void onClick(View v) {

EditText txtfld=(EditText) findViewById(R.id.ADD_EditText);
String input= txtfld.getText().toString();

GFileManager.writeFile("FileAusgaben.txt", input, getApplicationContext());


}

};

}

— geändert am 13.06.2013, 16:35:28

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

13.06.2013, 18:50:52 via Website

[quote]Am besten du postes noch mal den kompletten Code, aber bitte zwischen [ code ] - Zeichen.[/quote]

Als ob das in diesem Forum irgendeinen Unterschied machen würde...
Seit Jahren werden hier konsequent alle Anfragen nach Code-Formatierung ignoriert (ich wäre ja schon mit dem Erhalt der Einrückungen zufrieden)
Ob der Code dann monospaced Spaghetti oder "Normalschrift"-Spaghetti ist, macht für mich keinen Unterschied :ph34r:

Antworten
.......
  • Forum-Beiträge: 408

13.06.2013, 18:56:20 via Website

Ich hab das Problem gelöst :D ... Naja ich war zu blöd den BufferdReader zu schließen mit br.close() ; Früher immer gemacht und jetzt nicht ... aber egal danke für die Hilfe ;D

Antworten
impjor
  • Forum-Beiträge: 1.793

13.06.2013, 21:36:23 via App

Schön, dass es nun geklappt hat ;D

@and dev:
Der Code-Tag ist wirklich mieß. Trotzdem finde ich es immer noch übersichtlicher, wenn der Quelltext hervorgehoben ist und nicht normaler Text wirkt.

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

Antworten
San Blarnoi
  • Forum-Beiträge: 2.545

14.06.2013, 00:05:06 via Website

Der Code-Tag ist wirklich mieß. Trotzdem finde ich es immer noch übersichtlicher, wenn der Quelltext hervorgehoben ist und nicht normaler Text wirkt.

Hehe, schon klar, ich wollte zu diesem Thema nur den Cato 'raushängen lassen, vielleicht hilft ja häufige Wiederholung auch hier irgendwann mal :smug:

Antworten
Frank S.
  • Forum-Beiträge: 357

14.06.2013, 09:41:36 via Website

Antonio
Ich hab das Problem gelöst :D ... Naja ich war zu blöd den BufferdReader zu schließen mit br.close() ; Früher immer gemacht und jetzt nicht ... aber egal danke für die Hilfe ;D

und deshelb ging das nicht ?
gibt das nicht sonst nur ne Ressource Leak Warnung ? ^^

Bildung ist, was übrig bleibt, wenn man vergessen hat, was man gelernt hat. =)

Antworten
.......
  • Forum-Beiträge: 408

14.06.2013, 23:27:30 via Website

Irgenwie nicht.

Antworten
Frank S.
  • Forum-Beiträge: 357

15.06.2013, 15:09:14 via Website

Antonio
Irgenwie nicht.

kenne ich aber so...

Bildung ist, was übrig bleibt, wenn man vergessen hat, was man gelernt hat. =)

Antworten