簡體   English   中英

Android將文件加載到數組NullPointerException

[英]Android loading files into array NullPointerException

嗨,我正在嘗試將一組“列表”加載到String數組中,並且列表只是.txt文檔,我想使用文件名作為顯示器上的列表名稱,因此,我需要獲取所有我創建的文件夾中名為“列表”的文件,然后將它們顯示在arrayadapter中。

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行)

if(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)
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() );
}
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();
    }
    }

您需要記錄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 ,則無法獲得長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM