2014-03-25 14 views
0

嗨我想加載一組「列表」到一個字符串數組,並且列表是簡單的.txt文檔,我想在顯示器上使用列表名稱作爲列表名稱,因此我需要獲取我創建的名爲「Lists」的文件夾中的所有文件,然後將它們顯示到arrayadapter中。Android將文件加載到數組中NullPointerException

private String[] getListNames() { 
    //generates the file containing the list names 
    File file = new File(this.getFilesDir() +File.separator +"Lists"); 
    System.out.println(file.getAbsolutePath()); 
    File lists[] = file.listFiles(); 
    String names[] = {}; 


    if(lists.length >0){ 

    for(int i = 0; i < lists.length; i ++){ 
     names[i] = lists[i].getName(); 
    } 
    }else{ 
     names[0] = "Create New List"; 
    } 

根據堆棧跟蹤(線108)

如果有問題的代碼行(lists.length> 0){

堆棧跟蹤

03-25 04:37:16.981: E/AndroidRuntime(2099): Caused by: java.lang.NullPointerException 
03-25 04:37:16.981: E/AndroidRuntime(2099):  at dev.shaw.MyShoppingPlanner.List_Activity.getListNames(List_Activity.java:108) 
+0

Initialize'String names [] = {};'like this'String [] names = new String [lists.length> 0? lists.length:1];' –

+0

哪一行是'List_Activity.java'類的第108行? –

+0

是List_Activity.java的第108行,我也做了一個快速測試,由於某種原因它說這個文件不是目錄,我該如何解決這個問題,因爲我認爲這就是原因 – user3451418

回答

0
private List<String> myList = new ArrayList<String>(); 

String root_sd = Environment.getExternalStorageDirectory().toString(); 
file = new File(root_sd + "/Lists") ;  
File list[] = file.listFiles(); 

for(int i=0; i< list.length; i++) 
{ 
     myList.add(list[i].getName()); 
} 
0
try this one. 

//use two boolean variables. 
File file; 
boolean mExternalStorageAvailable = false; 
boolean mExternalStorageWriteable = false; 

//check if the sdcard is enable or disable in your device 

String state = Environment.getExternalStorageState(); 

     if (Environment.MEDIA_MOUNTED.equals(state)) { 
      mExternalStorageAvailable = mExternalStorageWriteable = true; 
     } else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 
      mExternalStorageAvailable = true; 
      mExternalStorageWriteable = false; 
     } else { 
      mExternalStorageAvailable = mExternalStorageWriteable = false; 
     } 

    private String[] getListNames() { 
if (mExternalStorageAvailable) { 
File path = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); 
if (!path.exists()) { 
path.mkdirs(); 
}     
file=path.getAbsolutePath(); 

} 
else { 
//use ContextWrapper it a onw way to access internal storage.  
    ContextWrapper cw = new ContextWrapper(getApplicationContext());  
(or) 
     //generates the file containing the list names 
file = new File(this.getFilesDir() +File.separator +"Lists"); 
if (!file.exists()) { 
file.mkdirs(); 
} 
     System.out.println(file.getAbsolutePath()); 
    } 

    File lists[] = file.listFiles(); 
    String names[] = {};     
    try{ 
     if (lists.length==0) 
    { 
     System.out.print("There is no files in the Directory"); 
    } 
     else{ 

     if(lists.length >0){ 

     for(int i = 0; i < lists.length; i ++){ 
      names[i] = lists[i].getName(); 
     } 
     }else{ 
      names[0] = "Create New List"; 
     } 
    catch(Exception e) 
    { 
    e.printStackTrace(); 
    } 
    } 
+0

當你張貼一個答案請,請,請分開您的代碼文本!並且在您的代碼中提供一些註釋,OP無法理解他/她出現問題的原因! – Fllo

0

您需要登錄,如果files.getFileList()真的返回任何東西或不:

改變這一點:

File lists[] = file.listFiles(); 
String names[] = {}; 


if(lists.length >0){ 

for(int i = 0; i < lists.length; i ++){ 
    names[i] = lists[i].getName(); 
} 
}else{ 
    names[0] = "Create New List"; 
} 

File lists[] = file.listFiles(); 
String names[] = {}; 

if(lists != null && lists.length >0){ 

for(int i = 0; i < lists.length; i ++){ 
    names[i] = lists[i].getName(); 
} 
}else{ 
    names[0] = "Create New List"; 
} 

PS:你不能得到的長度如果lists陣列是null首先。

相關問題