upnp 검색에 cling 라이브러리 사용. 의 deviceDiscovered가 발사 될 때마다, 다음 코드를 호출하면 아래와 같이 notifyDataSetChanged
Android viewpager notifyDataSetChanged가 IllegalStateException을 발생시킵니다.
public void deviceAdded(Registry registry, Device device) {
// TODO Auto-generated method stub
super.deviceAdded(registry, device);
String name = device.getDisplayString();
String manufac = device.getDetails().getManufacturerDetails()
.getManufacturer();
if (!manufac.contains("Microsoft")) {
if (!deviceNames.contains(name)) {
if (!devices.contains(device)) {
devices.add(device);
deviceNames.add(name);
Log.e(TAG,"\t\tdevice.size() = "+String.valueOf(devices.size()));
// Log.e(TAG,"Calling notify runnable after adding device "+deviceNames.get(deviceNames.size()-1));
runOnUiThread(notifyAdapterDataChanged);
}
}
}
}
ViewPager
필드 선언
ArrayList/*CopyOnWriteArrayList*/<Device> devices;
ArrayList/*CopyOnWriteArrayList*/<String> deviceNames;
notifyAdapterDataChanged
이 실행 가능하다 호출, 따라서 항 장치 목록을 업데이트
@Override
public void run() {
if(adapter != null){
adapter.notifyDataSetChanged();
}
}
아래 예외 발생 중
07-25 02:58:36.185: E/AndroidRuntime(11404): FATAL EXCEPTION: main
07-25 02:58:36.185: E/AndroidRuntime(11404): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 5, found: 6 Pager id: com.example.upnpclient/myviewpager Pager class: class android.support.v4.view.ViewPager Problematic adapter: class com.example.upnpclient.MyPagerAdapter
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.support.v4.view.ViewPager.populate(ViewPager.java:967)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1441)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.View.measure(View.java:15473)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:617)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:399)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.View.measure(View.java:15473)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5056)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.View.measure(View.java:15473)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.View.measure(View.java:15473)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5056)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
07-25 02:58:36.185: E/AndroidRuntime(11404): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2361)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.View.measure(View.java:15473)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1974)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1217)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1390)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1112)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4472)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.Choreographer.doCallbacks(Choreographer.java:555)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.Choreographer.doFrame(Choreographer.java:525)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.os.Handler.handleCallback(Handler.java:615)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.os.Handler.dispatchMessage(Handler.java:92)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.os.Looper.loop(Looper.java:137)
07-25 02:58:36.185: E/AndroidRuntime(11404): at android.app.ActivityThread.main(ActivityThread.java:4898)
07-25 02:58:36.185: E/AndroidRuntime(11404): at java.lang.reflect.Method.invokeNative(Native Method)
07-25 02:58:36.185: E/AndroidRuntime(11404): at java.lang.reflect.Method.invoke(Method.java:511)
07-25 02:58:36.185: E/AndroidRuntime(11404): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1006)
07-25 02:58:36.185: E/AndroidRuntime(11404): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:773)
07-25 02:58:36.185: E/AndroidRuntime(11404): at dalvik.system.NativeStart.main(Native Method)
나는 여기에 해결책이있다. (http : // stackoverflow.com/a/32185084/1239911) – Amt87