2011-12-29 2 views
0

Я понял, что getDir создаст каталог, если он еще не существует. Но я рушится на:Почему я получаю исключение NullPointerException на 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 правильно?

ответ

4

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

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

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

+0

Да, у него есть «getback» – michaelsmith

+0

Я немного расширил ответ. Есть ли какая-то причина, что не было бы допустимого Контекста, основанного на том, где это? (Это внутри действия или где-то еще?) –

0

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

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

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

+0

это контекст. Я добавил контекст в конструктор и использую его для создания getDir, и теперь все работает нормально. Спасибо! – michaelsmith

+0

Добро пожаловать. Я заметил только после публикации, что Тревор отредактировал свой первоначальный ответ, в основном включив то, что я говорил, извините, об этом. –

1

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

Смежные вопросы