Я собираюсь рассказать о том, что случилось со мной. Я разрабатываю системные файлы журнала, поэтому я создал новый класс, и я хотел, чтобы это было для всего моего приложения и имело много экземпляров этого класса, делающих разные журналы. Поэтому я должен создать защищенные или общедоступные объекты моего класса в классе приложения, который похож на одноэлементный класс.
Так что я что-то вроде этого:
public class MyApp extends Application {
protected LogApp logApp = new LogApp(getFilesDir());
Когда я назвал его от моего основного класса, чтобы получить файлы списка, например:
public class LogApp {
public File dirFiles;
//file parameter can't be null, the app will crash
public LogApp(File file){
dirFiles = file;
}
public File[] getListFiles(){
return dirFiles.listFiles()
}
public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
MyApp myApp = (MyApp)getApplicationContext();
File file[] = myApp.logApp.getListFiles();
}
Это расстраивало меня ошибка nullPointException. Решение в этом случае было настолько легким, что я чувствовал себя одновременно и самоуверенным.
Я не мог позвонить в getFilesDir в пространстве объявлений MyApp, потому что в этот момент нет контекста для получения этого Dir. Порядок выполнения в Android-приложении: Application -> Activity. Как это сказано в файле манифеста.
Решение? Создать свой объект в OnCreate случая моего MyApp класса, это выглядит следующим образом:
public class MyApp extends Application {
protected LogApp logApp;
void onCreate(){
logApp = new LogApp(getFilesDir());
Так что теперь я могу использовать его в своем основном классе таким же образом, я сделал это потому, что существует экземпляр моего MainActivity, который проходит в последний экземпляр из класса контекста.
Возможно, я ошибаюсь в пояснениях, и это не то, что действительно происходит в терминах терминологии и как работает андроид.Если кто-то лучше меня поймет, почему это работает, я приглашаю вас прояснить свои сомнения.
Надеюсь, это поможет вам.
Хм, Теперь это дает исключение NullPointerException, когда оно называется? – Jackles
Плохая идея ... вы закончите с Activity leak ... – Selvin
То есть, теперь она скомпилирована, но она вылетает, когда она вызывается. – Jackles