File.Listfile () принудительно закрывает (NullPointerException) - PullRequest
0 голосов
/ 08 июня 2011

У меня странная проблема, когда при первом запуске приложения оно работает хорошо, во 2-й раз он падает, 3-й работает, 4-й сбой и так далее ... Вот logcat:

E/AndroidRuntime(18039): FATAL EXCEPTION: main
E/AndroidRuntime(18039): java.lang.RuntimeException: Unable to start activity Co
mponentInfo{omar.quran1/omar.quran1.Quran}: java.lang.NullPointerException
E/AndroidRuntime(18039):        at android.app.ActivityThread.performLaunchActiv
ity(ActivityThread.java:1768)
E/AndroidRuntime(18039):        at android.app.ActivityThread.handleLaunchActivi
ty(ActivityThread.java:1784)
E/AndroidRuntime(18039):        at android.app.ActivityThread.access$1500(Activi
tyThread.java:123)
E/AndroidRuntime(18039):        at android.app.ActivityThread$H.handleMessage(Ac
tivityThread.java:939)
E/AndroidRuntime(18039):        at android.os.Handler.dispatchMessage(Handler.ja
va:99)
E/AndroidRuntime(18039):        at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime(18039):        at android.app.ActivityThread.main(ActivityThrea
d.java:3835)
E/AndroidRuntime(18039):        at java.lang.reflect.Method.invokeNative(Native
Method)
E/AndroidRuntime(18039):        at java.lang.reflect.Method.invoke(Method.java:5
07)
E/AndroidRuntime(18039):        at com.android.internal.os.ZygoteInit$MethodAndA
rgsCaller.run(ZygoteInit.java:847)
E/AndroidRuntime(18039):        at com.android.internal.os.ZygoteInit.main(Zygot
eInit.java:605)
E/AndroidRuntime(18039):        at dalvik.system.NativeStart.main(Native Method)

E/AndroidRuntime(18039): Caused by: java.lang.NullPointerException
E/AndroidRuntime(18039):        at omar.quran1.Quran.getReaders(Quran.java:565)
E/AndroidRuntime(18039):        at omar.quran1.Quran.onCreate(Quran.java:414)
E/AndroidRuntime(18039):        at android.app.Instrumentation.callActivityOnCre
ate(Instrumentation.java:1047)
E/AndroidRuntime(18039):        at android.app.ActivityThread.performLaunchActiv
ity(ActivityThread.java:1722)
E/AndroidRuntime(18039):        ... 11 more

Поэтому, когда код достигает getReaders (), он падает, и именно в этой строке

    int lengthtmp=f.listFiles().length;

Вот функция:

public void getReaders()
    {
        File f = new File(SuraDatabase.Audio_PATH);
        if(f!=null)
        {
        int lengthtmp=f.listFiles().length;  //It crashes here - NullPointerException
        if(lengthtmp==0||lengthtmp>10)
        {
            SoundFiles=false;
        }
        else
        {
            SoundFiles=true;
            File[] readArrays=f.listFiles();
            for(int i =0;i<lengthtmp;i++)
            {
                if(readArrays[i].isDirectory())
                {
                    ReaderOptions.add(readArrays[i].getName());
                }
            }
        }
        }
    }

Может кто-нибудь сказать мне, почему эта строка возвращает Null? Благодаря.

Ответы [ 3 ]

0 голосов
/ 08 июня 2011

Вы можете попробовать изменить вашу переменную "f" на что-то более описательное.Я обнаружил, что Android игнорирует 1-символьную переменную.

0 голосов
/ 08 июня 2011

listFiles может возвращать ноль в некоторых случаях.Попробуйте убедиться, что это каталог (File.isDirectory ()) и возвращаемое значение не равно нулю.

0 голосов
/ 08 июня 2011

Прежде всего, так как вы проверяете, является ли f нулевым, вместо этого проверьте, если f.exists(). Потому что если этого не существует, то нет способа, чтобы он мог что-либо перечислить, поэтому он был бы нулевым, что вызвало бы ваше исключение. Это не совсем ответ на ваш вопрос, но попробуйте и посмотрите, что произойдет, и опубликуйте результаты, чтобы мы могли дать вам лучший ответ.

Я также предполагаю, что вы как-то удаляете этот каталог после первого запуска, но это всего лишь предположение, не видя реального кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...