在android中逐行读取文本文件

问题描述:

该问题可能很常见,甚至可能被标记为重复。我尝试阅读与我的类似的其他问题,并试图做到这一点,可能像复制它(xD),但无济于事。在android中逐行读取文本文件

我是Android编程新手,我正在尝试读取文本文件。我能够读取整个文本文件,但我想要的是逐行读取文本文件。然后点击下一个按钮显示下一行。我应该怎么做?

这就是我现在所拥有的。 。 。

public class QuestionActivity extends ActionBarActivity { 


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

    text = (TextView) findViewById(R.id.textView1); 
    try { 
     in = this.getAssets().open("hhquestion.txt"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    reader = new BufferedReader(new InputStreamReader(in)); 
    try { 
     line = reader.readLine(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

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

} //onCreate 

public void onClick(View v){ 
    try { 
     line = reader.readLine(); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    if (line != null){ 
     text.setText(line); 
    } else { 
     //you may want to close the file now since there's nothing more to be done here. 
    } 
    } //onClick 

} //main class 

我试图从this question答案,因为这是我的问题最近的解决方案,但是当我运行该项目,应用程序正在关闭。 谢谢。

的logcat:

10-07 00:06:06.199: E/AndroidRuntime(1907): FATAL EXCEPTION: main 
10-07 00:06:06.199: E/AndroidRuntime(1907): Process: asp.ons.scads, PID: 1907 
10-07 00:06:06.199: E/AndroidRuntime(1907): java.lang.RuntimeException: Unable to start activity ComponentInfo{asp.ons.scads/asp.ons.scads.QuestionActivity}: java.lang.NullPointerException 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.ActivityThread.access$800(ActivityThread.java:135) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.os.Handler.dispatchMessage(Handler.java:102) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.os.Looper.loop(Looper.java:136) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.ActivityThread.main(ActivityThread.java:5017) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at java.lang.reflect.Method.invokeNative(Native Method) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at java.lang.reflect.Method.invoke(Method.java:515) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at dalvik.system.NativeStart.main(Native Method) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  Caused by: java.lang.NullPointerException 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at asp.ons.scads.QuestionActivity.onCreate(QuestionActivity.java:43) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.Activity.performCreate(Activity.java:5231) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159) 
10-07 00:06:06.199: E/AndroidRuntime(1907):  ... 11 more 
+0

嗨,你的应用程序关闭时是否有任何日志? – 2014-10-07 03:52:15

+0

@CuongHuynh,logcat发布。 。 。 – LadyWinter 2014-10-07 04:14:45

+0

我看到你在QuestionActivity.java第43行有一个NullPointerException。我想你在使用它之前忘记了init对象。 – 2014-10-07 04:30:06

一切fine..but当您单击下一步按钮ü需要setonClickListener()为下一步按钮,显示行。

public class QuestionActivity extends ActionBarActivity { 
    static InputStream inputStream; 
    static InputStreamReader inputreader; 
    static BufferedReader bufferedreader; 
    String data; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_question); 

     TextView textView = (TextView)findViewById(R.id.hellotxt); 
     Button next=(Button) findViewById(R.id.next); // next button id for suppose.. 

     inputStream = ctx.getResources().openRawResource(resId); 

     inputreader = new InputStreamReader(inputStream); 

     bufferedreader = new BufferedReader(inputreader); 

     next.setOnClickListener(new OnClickListener() { 

      @Override 
      public void onClick(View arg0) { 
      try 
      { 
       while ((line = bufferedreader.readLine()) != null) 
       { 
        data+=line+"\n"; 
       } 
       } 
      catch (IOException e) {} 

       textView.setText(data); 
      } 
      }); 

    } //onCreate 

    } //main class 

我能够读取整个文本文件,但我想要的是逐行读取文本文件行。然后点击下一个按钮显示下一行。我应该怎么做?

在当前的循环,你必须每行被保存到line变量,然后将其添加到stringBuilder以换行符。

而不是将它附加到stringBuilder,您可以将line添加到每次迭代的某种数组,然后每次用户单击下一个按钮时访问下一个元素。或者,您可以使用返回的stringBuilder以及添加到每行末尾的换行符(例如split(基本上给出与上述相同的内容,但使用您已编写的代码))执行某些操作。所以在onCreate结束时,你会打电话split获得由换行符分割字符串数组:

String[] lines = data.toString().split("\\n"); 

,然后每个用户点击该按钮时,你可以增加一个计数器,并得到行在计数器中的元素,或者你可能会稍微复杂一些,并且在读取它时从数组中移除元素(尽管在这种情况下可能不需要数组)。

+0

我已经根据您最初发布的代码编写了该代码,因此它现在不会真正应用相同的代码。 – ipavl 2014-10-07 03:19:55