2011-08-24 11 views
18

Mam plik zawierający tekst w osobnej linii.
Chcę najpierw wyświetlić linię, a następnie, jeśli naciśniemy przycisk, druga linia powinna być wyświetlona w numerze TextView, a pierwsza linia powinna zniknąć. Następnie, jeśli ponownie go przycisnę, powinien się pojawić trzeci wiersz i tak dalej.Jak uzyskać wiersz do odczytu pliku po linii

Czy muszę używać TextSwitcher czy cokolwiek innego? Jak mogę to zrobić?

Odpowiedz

31

Państwo określili go jako „Android aktywa” tak mam zamiar założyć, plik znajduje się w folderze aktywów. Tutaj:

InputStream in; 
BufferedReader reader; 
String line; 
TextView text; 

public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    text = (TextView) findViewById(R.id.textView1); 
    in = this.getAssets().open(<your file>); 
    reader = new BufferedReader(new InputStreamReader(in)); 
    line = reader.readLine(); 

    text.setText(line); 
    Button next = (Button) findViewById(R.id.button1); 
    next.setOnClickListener(this); 
} 

public void onClick(View v){ 
    line = reader.readLine(); 
    if (line != null){ 
     text.setText(line); 
    } else { 
     //you may want to close the file now since there's nothing more to be done here. 
    } 
} 

Wypróbuj to. Nie udało mi się zweryfikować, czy działa całkowicie, ale uważam, że jest to ogólny pomysł, który chcesz wykonać. Naturalnie będziesz chciał zamienić każdy znak R.id.textView1/button1 na nazwy, które określiłeś w swoim pliku układu.

Także: Tutaj jest bardzo mało sprawdzania błędów ze względu na przestrzeń. Będziesz chciał sprawdzić, czy twój zasób istnieje i jestem pewien, że powinien istnieć blok try/catch po otwarciu pliku do odczytu.

Edit: Duży błąd, to nie R.layout jest, to R.id Mam edytowane moją odpowiedź, aby rozwiązać ten problem.

+1

Możesz także uzyskać reputację, akceptując odpowiedź, jeśli ci pomogła. – Otra

15

następujący kod powinien spełniać swoje potrzeby

try { 
// open the file for reading 
InputStream instream = new FileInputStream("myfilename.txt"); 

// if file the available for reading 
if (instream != null) { 
    // prepare the file for reading 
    InputStreamReader inputreader = new InputStreamReader(instream); 
    BufferedReader buffreader = new BufferedReader(inputreader); 

    String line; 

    // read every line of the file into the line-variable, on line at the time 
    do { 
    line = buffreader.readLine(); 
    // do something with the line 
    } while (line != null); 

} 
} catch (Exception ex) { 
    // print stack trace. 
} finally { 
// close the file. 
instream.close(); 
} 
+0

Skąd czerpiesz metodę 'openFileInput()'? Ponadto zawsze powinieneś używać bloku "try/finally" do zamykania strumieni (tak, że zamykają się, gdy zostanie wyrzucony wyjątek) –

+1

Prawidłowa metodologia, ale użyłeś warunków w stylu C, które nie będą się kompilować. pozwala na automatyczną konwersję z null/int/assign itp. na boolean, więc 'if (instream)' i 'while while (line = buffreader.readLine())' muszą zostać zastąpione czymś takim jak 'if (instream! = null) 'i' while (buffreader.hasNext()) ' –

+1

BufferedReader nie ma funkcji hasNext() Po prostu sprawdź, czy jest pusta –

0

można po prostu użyć TextView i ButtonView. Odczytaj plik za pomocą BufferedReader, dostarczy ci ładny interfejs API do czytania linii jeden po drugim. Po kliknięciu przycisku wystarczy zmienić tekst w widoku tekstowym za pomocą polecenia settext.

Można również rozważyć przeczytanie całej zawartości pliku i umieszczenie go na liście ciągów, może to być czystsze, jeśli plik nie jest zbyt duży.

Pozdrawiam, Stéphane

Powiązane problemy