2017-10-08 4 views
-1

La méthode getApp() renvoie null. Une idée pourquoi?Obtention de l'objet App renvoie une valeur nulle

public class App extends Application { 

    private static App app; 

    private BoxStore boxStore; 

    @Override 
    public void onCreate() { 
     super.onCreate(); 

     app = this; 

     boxStore = MyObjectBox.builder().androidContext(App.this).build(); 
     if(BuildConfig.DEBUG) 
     { 
      new AndroidObjectBrowser(boxStore).start(this); 
     } 

    } 

    public static App getApp() { 
     return app; 
    } 

    public BoxStore getBoxStore() { 
     return boxStore; 
    } 

} 

La méthode getApp() est appelée à partir d'une activité comme ci-dessous:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    BoxStore boxStore = App.getApp().getBoxStore(); 
    Box<ListEntryObject> listEntryObjectBox = boxStore.boxFor(ListEntryObject.class); 

    sharedPreferences = getSharedPreferences("TYPE_OF_ACTION", Context.MODE_PRIVATE); 
    editor = sharedPreferences.edit(); 
    editor.putInt("sourceToDest", 0); 
    editor.apply(); 

    sharedPreferences = getSharedPreferences("POSITION" , Context.MODE_PRIVATE); 
    editor = sharedPreferences.edit(); 
    editor.putInt("position", 0); 
    editor.apply(); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 

    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      sharedPreferences = getSharedPreferences("TYPE_OF_ACTION", Context.MODE_PRIVATE); 
      editor = sharedPreferences.edit(); 

      editor.putInt("sourceToDest", 0); 
      editor.apply(); 

      fragmentManager = getSupportFragmentManager(); 
      entryDialogFragment = new EntryDialogFragment(); 

      entryDialogFragment.show(fragmentManager, "Sample Fragment"); 

     } 
    }); 

    entryObjectList = new ArrayList<>(); 

} 
+1

enregistrez le code où vous appelez cette méthode getApp –

+0

@AbdulWaheed J'ai modifié. Vérifiez s'il vous plaît. –

+0

vous devez ajouter votre classe d'application dans votre fichier manifeste android: name Le nom complet d'une sous-classe Application implémentée pour l'application. Lorsque le processus d'application est démarré, cette classe est instanciée avant l'un des composants de l'application. La sous-classe est facultative; la plupart des applications n'en auront pas besoin. En l'absence de sous-classe, Android utilise une instance de la classe Application de base. – Hector

Répondre

2

S'il vous plaît assurez-vous de relier cette classe (App) pour étiquette d'application dans Manifest.xml comme mentionné dans le code ci-dessous

<application 
android:name="package.MyClass" 
android:icon="@drawable/ic_launcher" 
android:label="@string/app_name" 
android:theme="@style/AppTheme"> 
... 
</application> 

Espérons que cela vous aide

+0

je vous remercie beaucoup. Je n'ai jamais su cela. –

+1

Je suis content que cela ait été utile. S'il vous plaît ne pas oublier de upvote et marquer comme accepté :) –