2015-03-20 2 views
0

В этом коде считывается только последнее слово, введенное в TXT-файл. Я выполняю одно и то же действие, когда выполняется условие. Какие изменения следует внести в код, чтобы он читал слово, снова вызывает ту же активность и затем читает новое слово?Как читать .txt документ по строкам в android?

public class Page extends Activity { 

    Button b; 
    TextView t; 
    EditText e; 
    int i = 0; 
    String str2; 
    String w, x=null; 

    static BufferedReader c = null; 
    static BufferedReader ic = null; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.page); 
     b = (Button) findViewById(R.id.benter); 
     t = (TextView) findViewById(R.id.tv); 
     e = (EditText) findViewById(R.id.et); 
     InputStream f = getResources().openRawResource(R.raw.incorrect); 
     ic = new BufferedReader(new InputStreamReader(f)); 

     try { 
      while ((w = ic.readLine()) != null) { 
        t.setText(w); 
        b.setOnClickListener(new View.OnClickListener() { 
         @Override 
         public void onClick(View v) { 
          str2 = e.getText().toString(); 

          if (str2.equals(x)) { 
           Toast.makeText(getApplication(), "RIGHT", Toast.LENGTH_LONG).show(); 


           Intent open = new Intent(Page.this, Page.class); 
           startActivity(open); 

          } else { 
           Toast.makeText(getApplication(), "WRONG", Toast.LENGTH_LONG).show(); 
           e.setText(""); 
          } 
         } 
        }); 


       } 

     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

ответ

1

Там будет MINOT ошибка в вашем onClickListener():

public class Page extends Activity { 

Button b; 
TextView t; 
EditText e; 
int i = 0; 
String str2; 
String w, x=null; 

static BufferedReader c = null; 
static BufferedReader ic = null; 


@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.page); 
    b = (Button) findViewById(R.id.benter); 
    t = (TextView) findViewById(R.id.tv); 
    e = (EditText) findViewById(R.id.et); 
    InputStream f = getResources().openRawResource(R.raw.incorrect); 
    ic = new BufferedReader(new InputStreamReader(f)); 

    try { 
     while ((w = ic.readLine()) != null) { 
       t.setText(w); 
       b.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         str2 = e.getText().toString(); 
         // it was str2.equals(x) nut x is null, replace w with x 
         if (str2.equals(w)) { 
          Toast.makeText(getApplication(), "RIGHT", Toast.LENGTH_LONG).show(); 


          Intent open = new Intent(Page.this, Page.class); 
          startActivity(open); 

         } else { 
          Toast.makeText(getApplication(), "WRONG", Toast.LENGTH_LONG).show(); 
          e.setText(""); 
         } 
        } 
       }); 


      } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 
} 

Этот код будет работать для вас

0

Для этого вы можете использовать библиотеку ввода-вывода Apache Commons. Это так просто. И сохраните свою красоту кода. И зачем получать .txt файлы из активов?

AssetManager am = context.getAssets(); 
InputStream fs = am.open("a.txt"); 
List<String> lines = IOUtils.readLines(file,"UTF-8"); 
0

Вы можете прочитать строку за строкой, используя этот код

try { 
     FileReader fileReader = new FileReader("FilePath"); 
     BufferedReader reader = new BufferedReader(fileReader); 
     String data = null; 
     StringBuilder builder = new StringBuilder(); 
     while ((data = reader.readLine()) != null) { 
      builder.append(data); 
     } 

     System.out.println(builder.toString()); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

В вашем коде есть проблема в вашем OnClick слушателю .. пожалуйста, поставить OnClick слушателя из цикла в то время как ..

0

Вы можете сохранить текстовый файл в «Активы» папке проекта и использовать следующий код, чтобы получить файл в классе Java

try { 
    reader = new BufferedReader(
      new InputStreamReader(getAssets().open("YOUR_TEXT_FILE.txt"))); 
    StringBuilder total = new StringBuilder(); 
    String line; 
    while ((line = reader.readLine()) != null) { 
     total.append(line); 
    } 
    message=total.toString(); 
    System.out.println(message); 
} catch (IOException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 

После этого у вас есть этот файл в строке сообщении

0

Вашей программа читает последнюю строку, потому что вы переписываете переменную 'w' каждый раз, когда вы вызываете метод readLine(). То, что вам нужно сделать, это установить пустую переменную 'w', а append с readLine(), чтобы сохранить все строки в вашем текстовом файле, которые были прочитаны, а затем вызвать setText() один раз, чтобы поместить все в ваш вид , Без добавления вы по существу переписываете переменную w при каждом прохождении цикла while, поэтому вы получаете последнюю строку из вашего текстового файла.

Смежные вопросы