2016-04-08 18 views
0

Ich versuche SharedPreferences zu verwenden, um die Sprache der App auszuwählen. Da ich eine externe XML-Datei mit den Übersetzungen habe, kann ich nicht einfach den Standard-Übersetzer von Android Studio verwenden. Mein Problem ist, dass die InputStream-Zeile unterhalb des Adapters nicht funktioniert (dieser Adapter fügt den XML-Inhalt in die RecyclerView-Elemente ein). Im Grunde funktioniert openFileInput nicht und zeigt mir getApplicationContext() nicht an, daher weiß ich nicht, wie ich das lösen soll.Aus der Datei in einem Adapter lesen

Wie kann ich von der Datei im Adapter lesen?

readFromFile(){ 
InputStream inputStream = openFileInput("language"); 
... 
} 
+0

Wo ist die Datei gespeichert? Und ist Ihr 'Adapter' ein' ArrayAdapter'? – shhp

+1

Sie möchten wahrscheinlich keine Datei in einen Adapter laden. Sie sollten es tun, wenn Sie das Dataset erstellen, das Sie an den Adapter übergeben. –

+0

@MikeM. Also sollte ich zum Beispiel eine AsyncTask verwenden? –

Antwort

1

Wenn Sie ArrayAdapter verwenden, können Sie getContext() rufen Sie den Zusammenhang mit diesem Array Adapter verbunden zu bekommen. Das ist

readFromFile(){ 
    InputStream inputStream = getContext().openFileInput("language"); 
    ... 
} 

Es ist jedoch eine BAD Praxis Datei im Hauptthread zu lesen. Sie sollten die Datei in einem Hintergrundthread lesen und Daten in diesem Thread verarbeiten. Sie können eine Datenstruktur verwenden, um die Informationen in dieser Datei zu speichern und die Datenstruktur zur späteren Verwendung an ArrayAdapter weiterzuleiten.

+0

Ich kann getContext() nicht verwenden, andriod erkennt es nicht. Die beste Vorgehensweise ist hier beispielsweise die Verwendung einer AsyncTask? –

+0

Ja, es ist besser, AsyncTask zu verwenden. Also, was ist dein 'Adapter'? – shhp

+0

Ich benutze meinen Adapter, um 'cardview' 's in einer' recyclerview' mit Inhalten zu füllen, die in einer XML-Datei enthalten sind (vorerst auf dem internen Telefonspeicher). Ich brauche diese Zeile, weil ich die sharedpreferences nicht direkt vom Adapter bekommen kann, also schreibe ich die Sprachpräferenz in MainActivity und lese die Sprache (d. H. "Französisch") innerhalb des Adapters. –