2013-07-25 4 views
1
public String[] get_file_names_from_SD() /* Compiler complains here */ 
{ 
    String state = Environment.getExternalStorageState(); 
    if (state.equals(Environment.MEDIA_MOUNTED)) { 
     File root = Environment.getExternalStorageDirectory(); 
     File dir = new File(root.getAbsolutePath() + "/journal_storage"); 
     if (dir.exists() & dir.isDirectory()) { 
      return (dir.list());    
     } 

    } else { 
     Toast.makeText(getActivity(), "Media Mounted Issue", Toast.LENGTH_SHORT).show(); 
    } 
} 

Так я возвращаюсь dir.list(), который будет содержать массив строк, но по какой-то причине компилятор показывает ошибку «Этот метод должен возвращать результат типа String []».Ошибка компиляции при возвращении строковых массивов

В соответствии с Android documentation метод возвращает массив строк.

Может ли кто-нибудь сказать мне, что я делаю неправильно?

+2

вместо '&', должно быть '' && в состоянии .. :) –

ответ

2

Все коды кода вашего метода: NOT, возвращающий String[]. Вы должны вернуть String[] или null в блок else, так как иначе блок является доступным кодовым блоком вашего метода.

public String[] get_file_names_from_SD() /*Compiler complains here*/ 
    { 
     String state = Environment.getExternalStorageState(); 
     if(state.equals(Environment.MEDIA_MOUNTED)) 
     { 
      File root = Environment.getExternalStorageDirectory(); 
      File dir = new File(root.getAbsolutePath()+"/journal_storage"); 
      if(dir.exists() & dir.isDirectory()) 
      { 
       return(dir.list()); 

      } 

     } 
     else 
     { 
     Toast.makeText(getActivity(), "Media Mounted Issue", Toast.LENGTH_SHORT).show(); 
     //--> return null; 
     } 
    } 
1

PUIT эта строка после еще высказывания:

return null; 

Это будет гарантировать, что ваш метод вернет успешно. Однако вы должны следить за NullPointerException, где вы вызываете этот метод.

1

Не все пути вызова приводят к возврату строки [], например. если ваша SD-карта не установлена, управление переходит в блок else и ничего не возвращает. Вы можете просто закончить его с помощью инструкции return null; в конце блока, чтобы эта ошибка исчезла.

1

Ваш другой блок ничего не возвращает .. То Y ошибка выдается

else 
    { 
    Toast.makeText(getActivity(), "Media Mounted Issue", Toast.LENGTH_SHORT).show(); 
    // return something here .. If nothing , return null 
    }