2016-04-08 40 views
0

Uygulama dilini seçmek için SharedPreferences'ı kullanmaya çalışıyorum. Çevirilerle birlikte bir dış XML dosyasına sahip olduğumdan, varsayılan android stüdyosunun çevirisini kullanamıyorum. Benim sorunum, aşağıda InputStream hattının Bağdaştırıcıda çalışmadığıdır (bu Bağdaştırıcı, XML içeriğini RecyclerView öğelerinin içine yerleştirir). Temelde openFileInput çalışmıyor ve bana getApplicationContext() göstermiyor, bu yüzden bunu nasıl çözeceğimi bilmiyorum.Bir Bağdaştırıcının içinden dosyadan okuma

Bağdaştırıcı içindeki dosyadan nasıl okurum? Eğer ArrayAdapter kullanıyorsanız

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

Dosya nerede saklanır? Ve senin Adaptörün bir "ArrayAdapter"? – shhp

+1

Büyük ihtimalle bir Bağdaştırıcının içine dosya yüklemek istemezsiniz. Bağdaştırıcıya ilettiğiniz veri kümesini oluştururken yapmanız gerekir. –

+0

@MikeM. Yani, örneğin bir AsyncTask kullanmalıyım? –

cevap

1

, bu dizi adaptör ile ilişkili içeriği almak için getContext() çağırabilir. Yani ana iş parçacığı dosyayı okumak için KÖTÜ uygulamadır, ancak

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

olduğunu. Dosyayı bir arka plan iş parçacığında okumalı ve bu iş parçacığındaki verileri işlemelisiniz. Bu dosyadaki bilgileri saklamak ve daha sonra kullanmak için veri yapısını ArrayAdapter'a geçirmek için bir veri yapısı kullanabilirsiniz.

+0

getContext() kullanamıyorum ve andriod bunu tanımıyor. Buradaki en iyi uygulama, örneğin bir AsyncTask kullanmaktır? –

+0

Evet AsyncTask'ı kullanmak daha iyidir. Peki 'Adaptör' nedir? – shhp

+0

Bağdaştırıcımı, bir XML dosyasında bulunan içerikle 'cardview's bir' recyclerview 'içinde doldurmak için kullanıyorum (şimdilik dahili telefonun deposunda bulunuyor). Bu satıra ihtiyacım var çünkü bağdaştırıcıları doğrudan Bağdaştırıcıdan alamıyorum, bu yüzden de dil tercihini MainActivity'de yazdım ve dili (yani "fransızca") bağdaştırıcının içinde okurum. –

İlgili konular