Parlerò di quello che mi è successo. Sto sviluppando un file di sistema di log, quindi ho creato una nuova classe e volevo che fosse per tutta la mia applicazione e con molte istanze di questa classe che facevano registri diversi. Quindi mi propongo di creare oggetti protetti o pubblici della mia classe sulla classe dell'applicazione simile a una classe singleton.
Così ho avuto qualcosa di simile:
public class MyApp extends Application {
protected LogApp logApp = new LogApp(getFilesDir());
quando ho chiamato dalla mia classe principale per ottenere i file di elenco, ad esempio:
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();
}
Questo mi è stato sempre un errore nullPointException. La soluzione in questo caso è stata così facile che mi sono sentito stufo e orgoglioso allo stesso tempo.
Non è stato possibile chiamare getFilesDir nello spazio dichiarazione MyApp perché in quel momento non c'è un contesto per ottenere Dir. L'ordine di esecuzione in un'app Android è: Applicazione -> Attività. Come è stato detto nel file Manifest.
Soluzione? Creare il mio oggetto in caso onCreate della mia classe MyApp, sembra che questo:
public class MyApp extends Application {
protected LogApp logApp;
void onCreate(){
logApp = new LogApp(getFilesDir());
Così ora posso usare nella mia classe principale nello stesso modo ho fatto perché esiste un'istanza del mio MainActivity che si estende in ultima istanza da Context Class.
Forse ho sbagliato con la spiegazione e questo non è ciò che sta realmente accadendo nei significati della terminologia e come funziona Android.Se qualcuno capisce meglio di me perché funziona, ti invito a chiarire i nostri dubbi.
Spero che questo ti possa aiutare.
fonte
2016-03-04 09:22:53
Hmm, ora fornisce NullPointerException quando viene chiamato? – Jackles
pessima idea ... si finirà con Perdita attività ... – Selvin
Cioè, ora è compilato ma si blocca quando viene chiamato. – Jackles