【问题标题】:Line by line textfile reading in android在android中逐行读取文本文件
【发布时间】:2014-12-01 09:37:06
【问题描述】:

这个问题可能很熟悉,甚至可能被标记为重复。我曾尝试阅读与我类似的其他问题并尝试这样做,可能会说复制它(xD),但无济于事。

我是 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

【问题讨论】:

  • 您好,您的应用关闭时有日志吗?
  • @CuongHuynh,logcat 已发布。 . .
  • 我看到你在 QuestionActivity.java 第 43 行遇到了 NullPointerException。我想你在使用它之前忘记了初始化一个对象。
  • 已经修复。我重新编码了整个活动,xD,谢谢。

标签: android text-files line-by-line


【解决方案1】:

一切都很好..但是当你点击下一个按钮时显示行你需要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

【讨论】:

    【解决方案2】:

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

    在当前循环中,您将每一行保存到 line 变量中,然后使用换行符将其附加到 stringBuilder

    您可以在每次迭代时将line 添加到某种数组中,而不是将其附加到stringBuilder,然后每次用户单击下一个按钮时访问下一个元素。

    或者,您可以对返回的 stringBuilder 和添加到每行末尾的换行符执行某些操作,例如 split(这基本上与上述内容相同,但使用您已经编写的代码) .所以在onCreate 的末尾,你会调用split 来得到一个由换行符分割的字符串数组:

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

    然后每次用户单击按钮时,您可以增加一个计数器并在计数器处获取元素的行,或者您可以变得更复杂一些并在读取时从数组中删除元素(尽管您在这种情况下可能不需要数组)。

    【讨论】:

    • 我是根据您最初发布的代码编写的,所以现在并不适用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-25
    • 2011-07-23
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    相关资源
    最近更新 更多