web-dev-qa-db-fra.com

Android - NullPointerException de créer un adaptateur

Je crée un adaptateur pour tableau pour une vue en liste, Tout fonctionne correctement, j'ai 2 fragments et 2 boutons en haut de la barre d'action qui changent entre ces 2 fragments . Mon problème est que je tombe en panne. si je bouge trop vite entre ces frags, lorsque j'ouvre fragOne, passez à fragTwo, puis revenez rapidement à fragOne .. fragOne jette un NPE depuis le contexte de getActivity ..

c'est la ligne qui se bloque:

adapter = new MainFragmentDocumentAdapter(getActivity(), docsList, DocumentsFragment.this, page);

le journal de bord:

E/AndroidRuntime﹕ FATAL EXCEPTION: main
Process: com.bbb.app, PID: 17438
Java.lang.NullPointerException: Attempt to invoke virtual method 'Java.lang.Object Android.content.Context.getSystemService(Java.lang.String)' on a null object reference
        at Android.widget.ArrayAdapter.init(ArrayAdapter.Java:310)
        at Android.widget.ArrayAdapter.<init>(ArrayAdapter.Java:104)
        at com.bbb.app.UI.adapters.MainFragmentDocumentAdapter.<init>(MainFragmentDocumentAdapter.Java:51)

aucune idée de comment puis-je résoudre ce problème?

17
JozeRi

Donc, après de nombreuses vérifications, j'ai découvert que le problème était que je retournais dans ce fragment alors que je me trouvais dans un fragment différent, car un auditeur l'a signalé et a essayé d'ouvrir cette méthode.

fondamentalement, je viens de l'envelopper dans un 

if (getActivity() != null) {
    // Code goes here.
}

et problème résolu.

merci beaucoup pour toute l'aide les gars!

43
JozeRi

si vous êtes sur un fragment, vérifiez si le fragment est ajouté.

{
    ... 

    if (!this.isAdded()) { //this = current fragment
        return;
    }
    LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE);
    ...
}
2
Pedro Romão

vous pouvez faire comme ça.

activité interne

public static UsageRecommendationTabActivity getInstance() {
        return activityInstance;
    }
@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
activityInstance=this;
}

fragment intérieur

 @Override
    public void onAttach(Activity activity) {
        // TODO Auto-generated method stub
        super.onAttach(activity);
        if (activity instanceof UsageRecommendationTabActivity)
            mParentActivity = (UsageRecommendationTabActivity) activity;
        if (mParentActivity == null)
            mParentActivity = UsageRecommendationTabActivity.getInstance();
    }

puis appelez votre adaptateur

adapter = new MainFragmentDocumentAdapter(mParentActivity, docsList, DocumentsFragment.this, page);
1
Srishti Roy

Ajouter une vérification pour getContext ()! = Null

Avant bloc

mAdapter = new SimpleHomeItemAdapter(getActivity(), mList);
listview.setAdapter(mAdapter);

Par exemple:

if (getActivity()!=null){

mAdapter = new SimpleHomeItemAdapter(getActivity(), mList);
listview.setAdapter(mAdapter);

}
0
Amir De