2015-02-09 7 views
17

मैं सूची दृश्य के लिए एक सरणी एडाप्टर बना रहा हूं, सबकुछ ठीक काम करता है, मेरे पास 2 टुकड़े हैं, और 2 बटन इस क्रिया के बीच बदलते हुए एक्शन बार के शीर्ष पर हैं। मेरी समस्या .., कि मैं दुर्घटनाओं प्राप्त करता है, तो मैं उन frags के बीच बहुत तेज़ी से है जब मैं fragOne खोलते हैं, तो fragTwo करने के लिए स्विच, और फिर जल्दी से वापस fragOne .. fragOne को स्थानांतरित getActivity संदर्भ से एक एनपीई फेंकताएंड्रॉइड - एडाप्टर बनाने से NullPointerException

है कि लाइन है कि दुर्घटनाओं:

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

लॉग रिपोर्ट:

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) 

किसी भी विचार कैसे मैं इस समस्या को हल कर सकते हैं?

+4

आप टुकड़ा जीवन चक्र समस्याओं के कारण दुर्घटनाओं प्राप्त है कि कभी-कभी निष्क्रियता() को शून्य होने का कारण बनता है। – jvrodrigues

+2

getAplicationContext() इष्टतम नहीं है क्योंकि यह एडाप्टर के भीतर कुछ भी स्टाइल नहीं करेगा। या तो ContextTheme एप्लिकेशन को ऐप थीम के साथ संदर्भित करें या एडाप्टर को एक वैश्विक ऑब्जेक्ट बनाएं ताकि जब खंड फिर से शुरू हो जाए तो यह किसी अन्य एडाप्टर को तुरंत चालू करने की कोशिश नहीं करेगा और आपका ऐप क्रैश नहीं होगा। – jvrodrigues

+0

jvrodrigues आपके उत्तर के लिए धन्यवाद, क्या आप इसके बारे में कुछ और बता सकते हैं? मैं इसे पूरी तरह से समझ में नहीं आया, धन्यवाद! – JozeRi

उत्तर

43

तो मूल रूप से बहुत सारे चेक के बाद मुझे पता चला कि समस्या यह थी कि मैं एक अलग टुकड़े के अंदर उस टुकड़े पर लौट रहा था क्योंकि मेरे पास एक श्रोता था जो उस बिंदु को इंगित करता था और उस विधि को खोलने की कोशिश करता था।

मूल रूप से मैं सिर्फ यह एक

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

और समस्या हल में लिपटे।

बहुत मददगार लोगों के लिए बहुत धन्यवाद!

+0

आप इसे कहां रखते हैं? मैं इसके साथ रिटर्न स्टेटमेंट लपेट नहीं सकता। – grant

+0

मुझे एक ऐसी ही समस्या थी जिसमें मैंने हल करने की कोशिश में 2 दिन बिताए। आपके प्रश्न के समाधान को पोस्ट करने के लिए समय निकालने के लिए धन्यवाद। – Nikaoto

+0

कृपया निर्दिष्ट करें कि यह कोड कहां रखा जाए? –

-1

उपयोग कोशिश कैच ब्लॉक, यह मेरे

1

आप इस तरह से कर सकते हैं के लिए काम किया।

गतिविधि

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

अंदर

टुकड़ा अंदर

@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(); 
    } 

और फिर अगर आप अगर टुकड़ा जोड़ा जाता है एक टुकड़ा जांच पर कर रहे हैं अपने एडाप्टर

adapter = new MainFragmentDocumentAdapter(mParentActivity, docsList, DocumentsFragment.this, page); 
+0

दिलचस्प विचार! इसकी एक बार कोशिश करूंगा – JozeRi

2

कहते हैं। !

{ 
    ... 

    if (!this.isAdded()) { //this = current fragment 
     return; 
    } 
    LocationManager locationManager = (LocationManager) getActivity().getSystemService(Context.LOCATION_SERVICE); 
    ... 
} 
0

जोड़ें getContext() के लिए जाँच = अशक्त

से पहले ब्लॉक

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

उदाहरण के लिए:

if (getActivity()!=null){ 

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

} 
संबंधित मुद्दे