在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
一切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");
,然后每个用户点击该按钮时,你可以增加一个计数器,并得到行在计数器中的元素,或者你可能会稍微复杂一些,并且在读取它时从数组中移除元素(尽管在这种情况下可能不需要数组)。
我已经根据您最初发布的代码编写了该代码,因此它现在不会真正应用相同的代码。 – ipavl 2014-10-07 03:19:55
嗨,你的应用程序关闭时是否有任何日志? – 2014-10-07 03:52:15
@CuongHuynh,logcat发布。 。 。 – LadyWinter 2014-10-07 04:14:45
我看到你在QuestionActivity.java第43行有一个NullPointerException。我想你在使用它之前忘记了init对象。 – 2014-10-07 04:30:06