2011-09-03 22 views
10

Un utente di una delle mie app ha segnalato questo errore. Sono confuso su cosa significhi come ripararlo. Dopo un po 'di googling ... ancora senza fortuna. Qualcuno ha visto prima o sa come risolverlo?java.lang.IllegalArgumentException: L'osservatore è nullo

java.lang.IllegalArgumentException: The observer is null. 
at android.database.Observable.unregisterObserver(Observable.java:59) 
at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42) 
at android.widget.HeaderViewListAdapter.unregisterDataSetObserver(HeaderViewListAdapter.java:256) 
at android.widget.AbsListView.onDetachedFromWindow(AbsListView.java:2309) 
at android.view.View.dispatchDetachedFromWindow(View.java:8197) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1968) 
at android.view.ViewGroup.dispatchDetachedFromWindow(ViewGroup.java:1966) 
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3257) 
at android.view.ViewGroup.removeViewInternal(ViewGroup.java:3237) 
at android.view.ViewGroup.removeView(ViewGroup.java:3185) 
at com.aheudev.a.slickdeals.adapters.DealPageAdapter.destroyItem(DealPageAdapter.java:174) 
at android.support.v4.view.ViewPager.populate(ViewPager.java:415) 
at android.support.v4.view.ViewPager.completeScroll(ViewPager.java:696) 
at android.support.v4.view.ViewPager.computeScroll(ViewPager.java:668) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2434) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.draw(View.java:9282) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2584) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2582) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.ViewGroup.drawChild(ViewGroup.java:2582) 
at android.view.ViewGroup.dispatchDraw(ViewGroup.java:2189) 
at android.view.View.draw(View.java:9282) 
at android.widget.FrameLayout.draw(FrameLayout.java:419) 
at com.android.internal.policy.impl.PhoneWindow$DecorView.draw(PhoneWindow.java:1923) 
at android.view.ViewRoot.draw(ViewRoot.java:1695) 
at android.view.ViewRoot.performTraversals(ViewRoot.java:1410) 
at android.view.ViewRoot.handleMessage(ViewRoot.java:2040) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:132) 
at android.app.ActivityThread.main(ActivityThread.java:4123) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:491) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599) 
at dalvik.system.NativeStart.main(Native Method) 

E ne è venuto da questa funzione nel mio PagerAdapter:

@Override 
public void destroyItem(View collection, int position, Object view) { 
    ((ViewPager) collection).removeView((View) view); 
} 
+0

ho trovato la risposta [qui.] (Http://stackoverflow.com/questions/8508294/what-is-trigger-this-exception-instance-java-lang-illegalargumentexception-th). – aheuermann

risposta

19

Anch'io stavo avendo lo stesso problema e sembra che unregisterDataSetObserver sul tuo DealPageAdapter venga chiamato due volte. Per risolvere il problema che ho sovrascritto l'unregisterDataSetObserver nel mio adattatore come tale

@Override 
public void unregisterDataSetObserver(DataSetObserver observer) { 
    if (observer != null) { 
     super.unregisterDataSetObserver(observer); 
    } 
} 

Spero che questo aiuti!

+0

Questo è proprio quello di cui avevo bisogno! –

+0

Grazie ha funzionato .... solo grazie amico. –

+0

ha funzionato per me, perfetto !!!!! – TharakaNirmana

1

Ci sono alcune persone che hanno avuto il problema Here e Here

Guardando lo stack di chiamate sembra la tua "vista" ha registrato un osservatore che ora sta cercando di annullare la registrazione. Quell'osservatore non è più lì anche se è previsto. Quindi l'errore. Questo potrebbe essere un bug o potrebbe essere correlato a come stai facendo le cose.

Cercando di guardare attraverso il Android Source per vedere se è possibile rintracciare.

Buona fortuna.

0

Una soluzione alternativa è avvolgere il ListView e rilevare l'eccezione. Questa soluzione ha funzionato per me, e non ho ancora trovato alcun effetto collaterale.

 
    public class CustumListView extends ListView {

 public CustumListView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    } 

    @Override 
    protected void onDetachedFromWindow() { 
    try { 
     super.onDetachedFromWindow(); 
    } catch(IllegalArgumentException iae) { 

    } 
    } 
} 

Problemi correlati