2013-03-02 79 views
0

我想在android中使用listview填充數組。我希望數組充滿存儲在SD卡上的幾個.txt文件中的數據。我有一個Int名字Mx,告訴循環要運行多少次(這就是我想要做的事情)。值Mx也是數組中所需的條目數。循環來填充在列表視圖中使用(從txt文件字符串填充數組)

我目前使用此代碼,但它不工作:

public void arrayload() { 
     ///////////////////////////////////working here///////////////////////////////// 
     //new looping code 
     for (int i=1; i<=Mx; i++){ 
       try{ 
        String fileName = String.valueOf(i) +".txt"; 
        File myFile = new File("/sdcard/mx/" +fileName); 
        FileInputStream fIn = new FileInputStream(myFile); 
         BufferedReader myReader = new BufferedReader(
           new InputStreamReader(fIn)); 
         String aDataRow = ""; 
         String aBuffer = ""; 
         while ((aDataRow = myReader.readLine()) != null) { 
          aBuffer += aDataRow + "\n"; 
         } 
       String[] lvdata = new String[Mx]; 
       lvdata[i] = aBuffer; 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.logbooklayout, lvdata); 
        lv1.setAdapter(adapter); 
        lv1.scrollTo(0, mxlv); // set the listview at a sensible point 
       } 
       catch (Exception e) { 
         Toast.makeText(getBaseContext(), e.getMessage(), 
           Toast.LENGTH_SHORT).show(); 
        } 
     } 

我先前已經硬編碼每一個進入陣列,但我想這樣會循環基於價值的MX整理的代碼了。我知道數組和listview工作正常,如果我手動填充他們,當我使用下面的應用程序崩潰的代碼。

logcat的輸出

03-02 16:41:23.888: E/AndroidRuntime(31497): FATAL EXCEPTION: main 
03-02 16:41:23.888: E/AndroidRuntime(31497): java.lang.NullPointerException 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:394) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.ArrayAdapter.getView(ArrayAdapter.java:362) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.AbsListView.obtainView(AbsListView.java:2159) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.ListView.measureHeightOfChildren(ListView.java:1246) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.ListView.onMeasure(ListView.java:1158) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.View.measure(View.java:15513) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:645) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:425) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.View.measure(View.java:15513) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.View.measure(View.java:15513) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.LinearLayout.measureVertical(LinearLayout.java:847) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.LinearLayout.onMeasure(LinearLayout.java:588) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.View.measure(View.java:15513) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4827) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2176) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.View.measure(View.java:15513) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1874) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1089) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1265) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:989) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4351) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.Choreographer.doCallbacks(Choreographer.java:562) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.Choreographer.doFrame(Choreographer.java:532) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.os.Handler.handleCallback(Handler.java:725) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.os.Handler.dispatchMessage(Handler.java:92) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.os.Looper.loop(Looper.java:137) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at android.app.ActivityThread.main(ActivityThread.java:5191) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at java.lang.reflect.Method.invokeNative(Native Method) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at java.lang.reflect.Method.invoke(Method.java:511) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562) 
03-02 16:41:23.888: E/AndroidRuntime(31497): at dalvik.system.NativeStart.main(Native Method) 

任何幫助,這是非常歡迎。我只是用Java切齒,所以我的代碼需要改進!

謝謝

回答

1

試試這個!

public void arrayload() { 
     ///////////////////////////////////working here///////////////////////////////// 

    String[] lvdata = new String[Mx]; 

    for (int i=0 ; i < Mx ;i++){ 
     lvdata[i]=""; 
    } 

     for (int i=0; i<Mx; i++){ 
       try{ 
        String fileName = String.valueOf(i) +".txt"; 
        File myFile = new File("/sdcard/mx/" +fileName); 
        FileInputStream fIn = new FileInputStream(myFile); 
         BufferedReader myReader = new BufferedReader(
           new InputStreamReader(fIn)); 
         String aDataRow = ""; 
         String aBuffer = ""; 
         while ((aDataRow = myReader.readLine()) != null) { 
          aBuffer += aDataRow + "\n"; 
         } 

       lvdata[i] = aBuffer; 

       } 
       catch (Exception e) { 
         Toast.makeText(getBaseContext(), e.getMessage(), 
           Toast.LENGTH_SHORT).show(); 
       } 
    } 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.logbooklayout, lvdata); 
    lv1.setAdapter(adapter); 
     lv1.scrollTo(0, mxlv); // set the listview at a sensible point 
} 

有在你的代碼的兩個問題:

  • 首先你instanatiate你填寫在每次循環排列。因此,設想Mx = 3 i = 2,因爲您只需在lvDate [2]中放入一個值,lvdata [0]和lvdata [1]就爲null,因此爲NullpointerException。
  • 其次你也實例化每個循環的適配器。

嘗試使用logcat的和敬酒不吃吃 「Log.e(標籤,味精,TR)」 你可以直接通過您的例外。

希望它會幫助

+0

感謝您的支持。好吧,在某些方面,我可以很高興,我不是那麼遙遠,但是現在你已經給我解釋,看起來很明顯,我正在循環一切!謝謝,只要問logcat點,如果我把Log.e(tag,msg,tr)減少logcat im的數量,當我編寫崩潰的時候,我必須通過logcat。 – andy 2013-03-02 18:13:38

+0

嘗試使用所描述的方式填充陣列時,仍然會收到強制關閉。 logcat輸出看起來非常相似......任何想法? – andy 2013-03-02 18:19:22

+0

我編輯我的帖子有一個括號問題。 – HoodVinci 2013-03-02 18:33:29