2014-10-07 33 views
1

該問題可能很常見,甚至可能被標記爲重複。我嘗試閱讀與我的類似的其他問題,並試圖做到這一點,可能像複製它(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

回答

0

一切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 
0

我能夠讀取整個文本文件,但我想要的是逐行讀取文本文件行。然後點擊下一個按鈕顯示下一行。我應該怎麼做?

在當前的循環,你必須每行被保存到line變量,然後將其添加到stringBuilder以換行符。

而不是將它附加到stringBuilder,您可以將line添加到每次迭代的某種數組,然後每次用戶單擊下一個按鈕時訪問下一個元素。或者,您可以使用返回的stringBuilder以及添加到每行末尾的換行符(例如split(基本上給出與上述相同的內容,但使用您已編寫的代碼))執行某些操作。所以在onCreate結束時,你會打電話split獲得由換行符分割字符串數組:

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

,然後每個用戶點擊該按鈕時,你可以增加一個計數器,並得到行在計數器中的元素,或者你可能會稍微複雜一些,並且在讀取它時從數組中移除元素(儘管在這種情況下可能不需要數組)。

+0

我已經根據您最初發布的代碼編寫了該代碼,因此它現在不會真正應用相同的代碼。 – ipavl 2014-10-07 03:19:55