Почему я получаю исключение NullPointerException для getDir? - PullRequest
0 голосов
/ 30 декабря 2011

Я понял, что getDir создаст каталог, если он еще не существует. Но я врезался в:

File dir= getDir(file,Context.MODE_PRIVATE);

файл имеет тип String. logcat показывает:

12-29 21:56:09.456: ERROR/AndroidRuntime(631): java.lang.NullPointerException
12-29 21:56:09.456: ERROR/AndroidRuntime(631):     at android.content.ContextWrapper.getDir(ContextWrapper.java:198)

Вот код:

public class ReportHome extends Application{
public ReportHome(String message, String file){
    …some code…
    inf(tosend,file);
}
public void inf(String c, String file){
    File dir= getDir(file,Context.MODE_PRIVATE);

Кстати: что за хитрость правильно форматирует более одной строки logcat?

Ответы [ 3 ]

4 голосов
/ 30 декабря 2011

Вы уверены, что аргумент file не равен нулю?

Если это не так, то другая возможность состоит в том, что вы не запускаете это в нормальной среде.

Глядя на исходный код для getDir () , единственная другая возможность состоит в том, что mBase (закрытая переменная, которая содержит текущий Context), является нулевым. Я не совсем уверен, как это произойдет, не увидев остальную часть вашего кода.

1 голос
/ 30 декабря 2011

Не реализуйте конструктор ни в одном компоненте, включая Application. Переместите эту логику на onCreate() после того, как вы позвонили super.onCreate().

0 голосов
/ 30 декабря 2011

Метод getDir () сам по себе не очень интересен, поскольку он просто делегирует вызов своему базовому объекту Context (как и при каждом вызове ContextWrapper).

@Override
public File getDir(String name, int mode) {
    return mBase.getDir(name, mode);
}

Важно знать, откуда вы вызываете метод.mBase устанавливается, когда вызывается конструктор ContextWrapper или с attachBaseContext().Если вы уверены, что file не null, похоже, что ни один из первых путей не был выбран.Можете ли вы проверить, что контекст, над которым вы работаете, на самом деле не null, распечатав / отладив возвращенный результат для getBaseContext()?

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