Będę mówić o tym, co mi się przydarzyło. Zajmuję się tworzeniem plików systemu log, więc stworzyłem nową klasę i chciałem, aby była dla wszystkich moich aplikacji i mając wiele instancji tej klasy robiących różne dzienniki. Tak więc chcę utworzyć obiekty chronione lub publiczne mojej klasy na klasie aplikacji, która jest podobna do klasy singleton.
więc miałem coś takiego:
public class MyApp extends Application {
protected LogApp logApp = new LogApp(getFilesDir());
gdy zadzwoniłem go z mojego główne klasy, aby uzyskać pliki lista na przykład:
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();
}
Zostało dostaniem mi błąd nullPointException. Rozwiązanie w tym przypadku było tak łatwe, że czułem się jednocześnie stuoidalnie i dumnie.
Nie mogłem zadzwonić, aby pobraćFilesDir w przestrzeni deklaracji MyApp, ponieważ w tym momencie nie ma kontekstu, aby uzyskać ten Dir. Kolejność wykonywania w aplikacji dla systemu Android to: Aplikacja -> Aktywność. Jak to jest powiedziane w pliku manifestu.
Rozwiązanie? Utworzyć mój obiekt w onCreate przypadku mojej klasie MojaApl, wygląda to tak:
public class MyApp extends Application {
protected LogApp logApp;
void onCreate(){
logApp = new LogApp(getFilesDir());
Więc teraz mogę używać go w moim główne klasy w ten sam sposób, w jaki zrobił to, ponieważ istnieje wystąpienie mojego główną działalność, która rozciąga się w ostatnie wystąpienie z klasy kontekstu.
Może się mylę z objaśnieniem i nie jest to, co tak naprawdę dzieje się w znaczeniu terminologii i jak działa Android.Jeśli ktoś rozumie lepiej ode mnie, dlaczego to działa, zapraszam do wyjaśnienia naszych wątpliwości.
Mam nadzieję, że to ci pomoże.
Hmm, teraz daje wyjątek NullPointerException, gdy jest wywoływany? – Jackles
Zły pomysł ... skończysz z Aktywnym wyciekiem ... – Selvin
To znaczy, że został skompilowany, ale zawiesza się, gdy jest wywoływany. – Jackles