观察者未注册。 ListView控件适配器有时崩溃 [英] Observer was not registered. ListView Adapter crashing sometime

查看:265
本文介绍了观察者未注册。 ListView控件适配器有时崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个下载了一些照片相册的数据服务,并有一个活动。该serveice有活动的参考,并调用该活动通知的用户界面,显示最新的列表数据是在队列的方法。该服务调用具有作为处理程序更新UI活动法例如

 公共无效askForChecheList(){
    galleryHandler.sendEmptyMessage(5);
}

在哪里处理程序是像

 专用处理器galleryHandler =新的处理程序(){
    @覆盖
    公共无效的handleMessage(消息MSG){
        // ...
        如果(msg.what == 5){
            showUpdatedList();
        }
    }
};

我更新ListView项具有以下code:

 私人无效同步showUpdatedList(){    尝试{        checkForPhotoService();
        如果(mPhotoSyncService!= NULL){
            this.mAllAlbumsData = mPhotoSyncService.getSyncAlbumsList();
        }
        如果(mAlbumQueuedListAdapter == NULL){
            mAlbumQueuedListAdapter =新AlbumQueueListAdapter(mContext,mAllAlbumsData);
            mQueuedListView.setAdapter(mAlbumQueuedListAdapter);
        }其他{
            mAlbumQueuedListAdapter.setData(mAllAlbumsData);
            mAlbumQueuedListAdapter.notifyDataSetChanged();
        }
    }赶上(例外五){
        e.printStackTrace();
    }
}

但不知道的某个时候它崩溃与此日志中的应用。我使用的ListView,适配器,但我得到这个错误第一次非常好的体验。没有人体验呢?

  01-19 23:21:01.139:W / System.err的(13013):java.lang.IllegalStateException:观察android.widget.AbsListView$AdapterDataSetObserver@413afb00未注册。
01-19 23:21:01.139:W / System.err的(13013):在android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:01.139:W / System.err的(13013):在android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:01.139:W / System.err的(13013):在android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:01.139:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:01.139:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:01.139:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.PhotoSyncService.downloadAlbums(PhotoSyncService.java:540)
01-19 23:21:01.144:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.PhotoSyncService.onHandleIntent(PhotoSyncService.java:111)
01-19 23:21:01.144:W / System.err的(13013):在android.app.IntentService $ ServiceHandler.handleMessage(IntentService.java:65)
01-19 23:21:01.144:W / System.err的(13013):在android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:01.144:W / System.err的(13013):在android.os.Looper.loop(Looper.java:155)
01-19 23:21:01.144:W / System.err的(13013):在android.os.HandlerThread.run(HandlerThread.java:60)
01-19 23:21:01.174:W / System.err的(13013):java.lang.IllegalStateException:观察android.widget.AbsListView$AdapterDataSetObserver@413afb00未注册。
01-19 23:21:01.174:W / System.err的(13013):在android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:01.174:W / System.err的(13013):在android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:01.174:W / System.err的(13013):在android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedValues(StatusActivity.java:275)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.access $ 4(StatusActivity.java:259)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity$2.handleMessage(StatusActivity.java:93)
01-19 23:21:01.174:W / System.err的(13013):在android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:01.174:W / System.err的(13013):在android.os.Looper.loop(Looper.java:155)
01-19 23:21:01.174:W / System.err的(13013):在android.app.ActivityThread.main(ActivityThread.java:5485)
01-19 23:21:01.174:W / System.err的(13013):在java.lang.reflect.Method.invokeNative(本机方法)
01-19 23:21:01.174:W / System.err的(13013):在java.lang.reflect.Method.invoke(Method.java:511)
01-19 23:21:01.174:W / System.err的(13013):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1028)
01-19 23:21:01.174:W / System.err的(13013):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
01-19 23:21:01.174:W / System.err的(13013):在dalvik.system.NativeStart.main(本机方法)
01-19 23:21:01.174:W / System.err的(13013):java.lang.IllegalStateException:观察android.widget.AbsListView$AdapterDataSetObserver@413afb00未注册。
01-19 23:21:01.174:W / System.err的(13013):在android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:01.174:W / System.err的(13013):在android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:01.174:W / System.err的(13013):在android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedValues(StatusActivity.java:275)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.access $ 4(StatusActivity.java:259)
01-19 23:21:01.174:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity$2.handleMessage(StatusActivity.java:93)
01-19 23:21:01.174:W / System.err的(13013):在android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:01.174:W / System.err的(13013):在android.os.Looper.loop(Looper.java:155)
01-19 23:21:01.174:W / System.err的(13013):在android.app.ActivityThread.main(ActivityThread.java:5485)
01-19 23:21:01.174:W / System.err的(13013):在java.lang.reflect.Method.invokeNative(本机方法)
01-19 23:21:01.174:W / System.err的(13013):在java.lang.reflect.Method.invoke(Method.java:511)
01-19 23:21:01.174:W / System.err的(13013):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1028)
01-19 23:21:01.174:W / System.err的(13013):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
01-19 23:21:01.174:W / System.err的(13013):在dalvik.system.NativeStart.main(本机方法)
01-19 23:21:02.589:W / System.err的(13013):java.lang.IllegalStateException:观察android.widget.AbsListView$AdapterDataSetObserver@413afb00未注册。
01-19 23:21:02.609:W / System.err的(13013):在android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:02.609:W / System.err的(13013):在android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:02.609:W / System.err的(13013):在android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:02.609:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:02.619:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:02.619:W / System.err的(13013):在au.com.apparitionimaging.photosuitcase.activities.StatusActivity$2.handleMessage(StatusActivity.java:97)
01-19 23:21:02.619:W / System.err的(13013):在android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:02.629:W / System.err的(13013):在android.os.Looper.loop(Looper.java:155)
01-19 23:21:02.629:W / System.err的(13013):在android.app.ActivityThread.main(ActivityThread.java:5485)
01-19 23:21:02.629:W / System.err的(13013):在java.lang.reflect.Method.invokeNative(本机方法)
01-19 23:21:02.629:W / System.err的(13013):在java.lang.reflect.Method.invoke(Method.java:511)
01-19 23:21:02.629:W / System.err的(13013):在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:1028)
01-19 23:21:02.629:W / System.err的(13013):在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
01-19 23:21:02.629:W / System.err的(13013):在dalvik.system.NativeStart.main(本机方法)


解决方案

这是不是你的处理问题的解决方案,但我会建议,以避免问题使用观察者模式您遇到,我发现这个 网站 应解释逻辑如何正确地做到这一点。

I have a service that is downloading some photos album data and there is a Activity. The serveice has a reference of Activity and calls method of the activity notifying the UI to show latest list data that is in queue. The service calls an activity-method that has as handler to update UI e.g

public void askForChecheList ( ) {
    galleryHandler.sendEmptyMessage ( 5 ) ;
}

Where handler is like

private Handler galleryHandler = new Handler() {
    @ Override
    public void handleMessage (Message msg) {
        // ...
        if ( msg.what == 5 ) {
            showUpdatedList ( ) ;
        }
    }
};

I am updating listView item with following code:

private synchronized void showUpdatedList ( ) {

    try {

        checkForPhotoService ( ) ;
        if ( mPhotoSyncService != null ) {
            this.mAllAlbumsData = mPhotoSyncService.getSyncAlbumsList ( ) ;
        }
        if ( mAlbumQueuedListAdapter == null ) {
            mAlbumQueuedListAdapter = new AlbumQueueListAdapter ( mContext , mAllAlbumsData ) ;
            mQueuedListView.setAdapter ( mAlbumQueuedListAdapter ) ;
        } else {
            mAlbumQueuedListAdapter.setData ( mAllAlbumsData ) ;
            mAlbumQueuedListAdapter.notifyDataSetChanged ( );
        }
    } catch ( Exception e ) {
        e.printStackTrace ( ) ;
    }
}

But Don't know sometime it crash the application with this log. I have a very good experience of using listView , Adapter but I am getting this error first time. Did anyone experience that do?

01-19 23:21:01.139: W/System.err(13013): java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@413afb00 was not registered.
01-19 23:21:01.139: W/System.err(13013): at android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:01.139: W/System.err(13013): at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:01.139: W/System.err(13013): at android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:01.139: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:01.139: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:01.139: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.PhotoSyncService.downloadAlbums(PhotoSyncService.java:540)
01-19 23:21:01.144: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.PhotoSyncService.onHandleIntent(PhotoSyncService.java:111)
01-19 23:21:01.144: W/System.err(13013): at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
01-19 23:21:01.144: W/System.err(13013): at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:01.144: W/System.err(13013): at android.os.Looper.loop(Looper.java:155)
01-19 23:21:01.144: W/System.err(13013): at android.os.HandlerThread.run(HandlerThread.java:60)
01-19 23:21:01.174: W/System.err(13013): java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@413afb00 was not registered.
01-19 23:21:01.174: W/System.err(13013): at android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:01.174: W/System.err(13013): at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:01.174: W/System.err(13013): at android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedValues(StatusActivity.java:275)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.access$4(StatusActivity.java:259)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity$2.handleMessage(StatusActivity.java:93)
01-19 23:21:01.174: W/System.err(13013): at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:01.174: W/System.err(13013): at android.os.Looper.loop(Looper.java:155)
01-19 23:21:01.174: W/System.err(13013): at android.app.ActivityThread.main(ActivityThread.java:5485)
01-19 23:21:01.174: W/System.err(13013): at java.lang.reflect.Method.invokeNative(Native Method)
01-19 23:21:01.174: W/System.err(13013): at java.lang.reflect.Method.invoke(Method.java:511)
01-19 23:21:01.174: W/System.err(13013): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
01-19 23:21:01.174: W/System.err(13013): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
01-19 23:21:01.174: W/System.err(13013): at dalvik.system.NativeStart.main(Native Method)
01-19 23:21:01.174: W/System.err(13013): java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@413afb00 was not registered.
01-19 23:21:01.174: W/System.err(13013): at android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:01.174: W/System.err(13013): at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:01.174: W/System.err(13013): at android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedValues(StatusActivity.java:275)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.access$4(StatusActivity.java:259)
01-19 23:21:01.174: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity$2.handleMessage(StatusActivity.java:93)
01-19 23:21:01.174: W/System.err(13013): at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:01.174: W/System.err(13013): at android.os.Looper.loop(Looper.java:155)
01-19 23:21:01.174: W/System.err(13013): at android.app.ActivityThread.main(ActivityThread.java:5485)
01-19 23:21:01.174: W/System.err(13013): at java.lang.reflect.Method.invokeNative(Native Method)
01-19 23:21:01.174: W/System.err(13013): at java.lang.reflect.Method.invoke(Method.java:511)
01-19 23:21:01.174: W/System.err(13013): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
01-19 23:21:01.174: W/System.err(13013): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
01-19 23:21:01.174: W/System.err(13013): at dalvik.system.NativeStart.main(Native Method)
01-19 23:21:02.589: W/System.err(13013): java.lang.IllegalStateException: Observer android.widget.AbsListView$AdapterDataSetObserver@413afb00 was not registered.
01-19 23:21:02.609: W/System.err(13013): at android.database.Observable.unregisterObserver(Observable.java:69)
01-19 23:21:02.609: W/System.err(13013): at android.widget.BaseAdapter.unregisterDataSetObserver(BaseAdapter.java:42)
01-19 23:21:02.609: W/System.err(13013): at android.widget.ListView.setAdapter(ListView.java:556)
01-19 23:21:02.609: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.showUpdatedList(StatusActivity.java:326)
01-19 23:21:02.619: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity.getCachedList(StatusActivity.java:228)
01-19 23:21:02.619: W/System.err(13013): at au.com.apparitionimaging.photosuitcase.activities.StatusActivity$2.handleMessage(StatusActivity.java:97)
01-19 23:21:02.619: W/System.err(13013): at android.os.Handler.dispatchMessage(Handler.java:99)
01-19 23:21:02.629: W/System.err(13013): at android.os.Looper.loop(Looper.java:155)
01-19 23:21:02.629: W/System.err(13013): at android.app.ActivityThread.main(ActivityThread.java:5485)
01-19 23:21:02.629: W/System.err(13013): at java.lang.reflect.Method.invokeNative(Native Method)
01-19 23:21:02.629: W/System.err(13013): at java.lang.reflect.Method.invoke(Method.java:511)
01-19 23:21:02.629: W/System.err(13013): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
01-19 23:21:02.629: W/System.err(13013): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:795)
01-19 23:21:02.629: W/System.err(13013): at dalvik.system.NativeStart.main(Native Method)

解决方案

This is not a solution for your handler problem, but I would recommend using the observer-pattern in order to avoid the problems you are having, I found this site which should explain the logic how to do this properly.

这篇关于观察者未注册。 ListView控件适配器有时崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆