SimpleAdapter的使用出现IOException----求解

huangliluckystar 2010-07-08 12:06:09
1.用SimpleAdapter来填充Listview
ListView lv = (ListView) findViewById(R.id.LvNetwork);
mAccessPointData = new ArrayList<Map<String, Object>>();
mAccessPointAdapter = new SimpleAdapter(this, mAccessPointData,
R.layout.network_listitem, new String[] { "title", "image1",
"image2", "image3", "state", "AccessPointState",
"Level" }, // +helen
new int[] { R.id.ItemTitle, R.id.iv1, R.id.iv2, R.id.iv3,
R.id.ItemState} // -helen
);
Log.d("helen", "before set Adapter");
lv.setAdapter(mAccessPointAdapter);


2.在另一个地方对mAccessPointData进行add value.
if (added) {
boolean isHas = false;
Iterator<Map<String, Object>> it = mAccessPointData.iterator();
while (it.hasNext()) {
Map<String, Object> item = (Map<String, Object>) it.next();
if (((AccessPointState) item.get("AccessPointState"))
.equals(ap)) {
isHas = true;
break;
}
}

if (!isHas) {
Map<String, Object> item = new HashMap<String, Object>();
item.put("title", ap.getHumanReadableSsid());
if (ap.hasSecurity()) {
item.put("image1", R.drawable.ic_secure);
}

// item.put("image2", null);
int level = 0;
if (ap.seen) {
if (ap.getSummarizedStatus().equals("Connected")) {
switch (WifiManager.calculateSignalLevel(ap.signal, 4)) {
case 0:
level = 0;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_on_0);
break;
case 1:
level = 1;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_on_weak);
break;
case 2:
level = 2;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_on);
break;
case 3:
level = 3;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_4bars_on);
break;
}
} else {
switch (WifiManager.calculateSignalLevel(ap.signal, 4)) {
case 0:
level = 0;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_off_0);
break;
case 1:
level = 1;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_off_weak);
break;
case 2:
level = 2;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_off);
break;
case 3:
level = 3;
item.put("Level", level);
item.put("image2", R.drawable.wifi_connection_4bars11);
break;
}
}
} else {
item.put("image2", R.drawable.wifi_connection_off);
}
item.put("Level", level);

item.put("AccessPointState", ap);
item.put("state", ap.getSummarizedStatus()); // helen
Log.i("helen", ap.getSummarizedStatus()); // helen
ap.setCallback(this);
Log.d("helen", "after set call back");
mAccessPointData.add(item);
Log.d("helen", "after mAccessPointData add");
}
} else {
Iterator<Map<String, Object>> it = mAccessPointData.iterator();
while (it.hasNext()) {
Map<String, Object> item = (Map<String, Object>) it.next();
if (((AccessPointState) item.get("AccessPointState"))
.equals(ap)) {
it.remove();
}
}
}

mAccessPointAdapter.notifyDataSetChanged();

3. 在notifyDataSetChanged之后开始报IOException
D/skia ( 228): ---- read threw an exception
W/System.err( 228): java.io.IOException: Is a directory
W/System.err( 228): at org.apache.harmony.luni.platform.OSFileSystem.readImp
l(Native Method)
W/System.err( 228): at org.apache.harmony.luni.platform.OSFileSystem.read(OS
FileSystem.java:154)
W/System.err( 228): at java.io.FileInputStream.read(FileInputStream.java:333
)
W/System.err( 228): at java.io.BufferedInputStream.fillbuf(BufferedInputStre
am.java:200)
W/System.err( 228): at java.io.BufferedInputStream.read(BufferedInputStream.
java:350)
W/System.err( 228): at android.graphics.BitmapFactory.nativeDecodeStream(Nat
ive Method)
W/System.err( 228): at android.graphics.BitmapFactory.decodeStream(BitmapFac
tory.java:375)
W/System.err( 228): at android.graphics.BitmapFactory.decodeFile(BitmapFacto
ry.java:171)
W/System.err( 228): at android.graphics.BitmapFactory.decodeFile(BitmapFacto
ry.java:196)
W/System.err( 228): at android.graphics.drawable.Drawable.createFromPath(Dra
wable.java:762)
W/System.err( 228): at android.widget.ImageView.resolveUri(ImageView.java:49
8)
W/System.err( 228): at android.widget.ImageView.setImageURI(ImageView.java:2
87)
W/System.err( 228): at android.widget.SimpleAdapter.setViewImage(SimpleAdapt
er.java:270)
W/System.err( 228): at android.widget.SimpleAdapter.bindView(SimpleAdapter.j
ava:198)
W/System.err( 228): at android.widget.SimpleAdapter.createViewFromResource(S
impleAdapter.java:136)
W/System.err( 228): at android.widget.SimpleAdapter.getView(SimpleAdapter.ja
va:114)
W/System.err( 228): at android.widget.AbsListView.obtainView(AbsListView.jav
a:1252)
W/System.err( 228): at android.widget.ListView.makeAndAddView(ListView.java:
1650)
W/System.err( 228): at android.widget.ListView.fillSpecific(ListView.java:12
09)
W/System.err( 228): at android.widget.ListView.layoutChildren(ListView.java:
1486)
W/System.err( 228): at android.widget.AbsListView.onLayout(AbsListView.java:
1114)
W/System.err( 228): at android.view.View.layout(View.java:6133)
W/System.err( 228): at android.widget.LinearLayout.setChildFrame(LinearLayou
t.java:1119)
W/System.err( 228): at android.widget.LinearLayout.layoutVertical(LinearLayo
ut.java:998)
W/System.err( 228): at android.widget.LinearLayout.onLayout(LinearLayout.jav
a:918)
W/System.err( 228): at android.view.View.layout(View.java:6133)
W/System.err( 228): at android.widget.LinearLayout.setChildFrame(LinearLayou
t.java:1119)
W/System.err( 228): at android.widget.LinearLayout.layoutVertical(LinearLayo
ut.java:998)
W/System.err( 228): at android.widget.LinearLayout.onLayout(LinearLayout.jav
a:918)
W/System.err( 228): at android.view.View.layout(View.java:6133)
W/System.err( 228): at android.widget.FrameLayout.onLayout(FrameLayout.java:
333)
W/System.err( 228): at android.view.View.layout(View.java:6133)
W/System.err( 228): at android.widget.FrameLayout.onLayout(FrameLayout.java:
333)
W/System.err( 228): at android.view.View.layout(View.java:6133)
W/System.err( 228): at android.view.ViewRoot.performTraversals(ViewRoot.java
:929)
W/System.err( 228): at android.view.ViewRoot.handleMessage(ViewRoot.java:148
2)
W/System.err( 228): at android.os.Handler.dispatchMessage(Handler.java:99)
W/System.err( 228): at android.os.Looper.loop(Looper.java:123)
W/System.err( 228): at android.app.ActivityThread.main(ActivityThread.java:3
948)
W/System.err( 228): at java.lang.reflect.Method.invokeNative(Native Method)
W/System.err( 228): at java.lang.reflect.Method.invoke(Method.java:521)
W/System.err( 228): at com.android.internal.os.ZygoteInit$MethodAndArgsCalle
r.run(ZygoteInit.java:782)
W/System.err( 228): at com.android.internal.os.ZygoteInit.main(ZygoteInit.ja
va:540)
W/System.err( 228): at dalvik.system.NativeStart.main(Native Method)

想了好久都不明白为啥会报IOException, 向高手求救,不胜感激!
...全文
487 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
幸福小吜 2011-11-14
  • 打赏
  • 举报
回复
额。。。记录一下吧
huangliluckystar 2010-07-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 pengpeng5047 的回复:]

顶起,我这两天也遇到了这个问题,也是用SimpleAdapter时报ava.io.IOException: Is a directory,和你的一样,我是想做一个android平台里的音乐播放器,显示音乐列表时想把当前正在播放的音乐加以标记。
我是这样实现的:
Java code
ListAdapter adapter = null;
Cursor cur = getCon……
[/Quote]

看了你的代码。。我觉得是同样的问题,你不妨试试在
if(cur.getInt(0) == num+1)//判断当前音乐是否正在播放
map.put("state",R.drawable.on);//R.drawable.on是一个标志图片
后加else 里给一张图(nullpic,白色的图)map.put("state", R.drawable.nullpic);
huangliluckystar 2010-07-09
  • 打赏
  • 举报
回复
我的问题已经解决了。。
错误1.item没有给image3值。。
错误2.if (ap.hasSecurity()) {
item.put("image1", R.drawable.ic_secure);
}当不进if时,也没有给image1值
错误3.case之后没有给default的图。。
这三个错误都照成fill buffer出错
pengpeng5047 2010-07-08
  • 打赏
  • 举报
回复
顶起,我这两天也遇到了这个问题,也是用SimpleAdapter时报ava.io.IOException: Is a directory,和你的一样,我是想做一个android平台里的音乐播放器,显示音乐列表时想把当前正在播放的音乐加以标记。
我是这样实现的:
ListAdapter adapter = null;
Cursor cur = getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null, null, null, null);
startManagingCursor(cur);
count = cur.getCount();
List<Map<String, Object>> items = new ArrayList<Map<String, Object>>();
while (cur.moveToNext()) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("name",cur.getString(2));
map.put("time",timeChange(cur.getInt(9)));
if(cur.getInt(0) == num+1)//判断当前音乐是否正在播放
map.put("state",R.drawable.on);//R.drawable.on是一个标志图片
items.add(map);
}
cur.close();
adapter = new SimpleAdapter(this, items,
R.layout.sdlist,
new String[] { "name", "time", "state" },//歌名,时长,标志
new int[] {R.id.music_name,R.id.music_time,R.id.is_playing}
);

一运行就IOException,正发愁呢,强烈关注!!!

58,454

社区成员

发帖
与我相关
我的任务
社区描述
Java Eclipse
社区管理员
  • Eclipse
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧