Issue with bitmap items in XMLPullParser(XMLPullParser 中的位图项问题)
问题描述
根据stackoverflow搜索,这个问题准确描述了我现在需要理解的内容,但没有答案或评论,它只查看了6次:
According to stackoverflow searching, this question exactly describes what I need to understand now, but there are no answers or comments and It viewed only 6 times:
XMLPullParser 剪切位图的最后一个元素
我可以将我的 XML 文档结构添加到这个问题中:
I can add my structure of XML-document to this question:
<name id="92">
<display-name>Real name</display-name>
<icon src="https://image.flaticon.com/icons/svg/25/25471.svg" />
</name>
<name id="107">
<display-name>Real name 2</display-name>
<icon src="https://image.flaticon.com/icons/svg/17/17004.svg" />
</name>
解析器:
XmlPullParser parser = getResources().getXml(R.xml.myxml);
try {
while (parser.getEventType() != XmlPullParser.END_DOCUMENT) {
switch (parser.getEventType()){
case XmlPullParser.START_TAG:
tagname = parser.getName();
if (parser.getName().equals(iconsrc)){
iconsrcVALUE = parser.getAttributeValue(null, "src");
myBitmap = new AsyncForBitmap().execute(iconsrcVALUE).get();
}
if (parser.getName().equals(displayname)) {
displaynameValue = parser.nextText();
items.add(new SomeItem(displaynameValue, myBitmap));
}
break;
case XmlPullParser.TEXT :
tagtext = parser.getText();
break;
case XmlPullParser.END_TAG:
parser.getName();
break;
default:
break;
}
parser.next();
}
} catch (Throwable t) {
Toast.makeText(this,
"Error while loading XML: " + t.toString(), Toast.LENGTH_LONG)
.show();
}
在列表视图中,我的图像从列表视图的第一个索引而不是 0 索引开始.所以在最后一个 listview 元素中,我有 n-1 张图片.
In the listview I have images which are atarting from 1st index of listview instead of 0 index. So in the last listview element I have n-1 image.
SomeAdapter adapter = new SomeAdapter (this, R.layout.list_item, items);
listView.setAdapter(adapter);
位图加载:
class AsyncForBitmap extends AsyncTask<String, Void, Bitmap> {
private Exception exception;
protected Bitmap doInBackground(String... urls) {
try {
URL url=new URL(urls[0]);
Bitmap bitmap = BitmapFactory.decodeStream((InputStream)url.getContent());
return bitmap;
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
}
}
适配器:
public class SomeAdapter extends ArrayAdapter<SomeItem>{
private LayoutInflater inflater;
private int layout;
private List<SomeItem> items;
public SomeAdapter (Context context, int resource, List<SomeItem> items) {
super(context, resource, programmes);
this.programmes = programmes;
this.layout = resource;
this.inflater = LayoutInflater.from(context);
}
public View getView(int position, View convertView, ViewGroup parent) {
View view=inflater.inflate(this.layout, parent, false);
ImageView icon = view.findViewById(R.id.iconsrc);
TextView nameView = view.findViewById(R.id.name);
SomeItem programme = programmes.get(position);
icon.setImageBitmap(programme.getIconResource());
nameView.setText(programme.getName());
return view;
}
SomeItem 类:
public class SomeItem{
private String name;
private Bitmap iconsrc;
private String nameid;
public SomeItem(String name, Bitmap iconsrc, String nameid){
this.name=name;
this.iconsrc=iconsrc;
this.nameid=nameid;
}
public String getName() {
return this.name;
}
public void setName(String name) {
this.name = name;
}
public String getnameid() {
return this.nameid;
}
public void setnameid(String nameid) {
this.nameid = nameid;
}
public Bitmap getIconResource() {
return this.iconsrc;
}
public void setIconResource(Bitmap iconsrc) {
this.iconsrc = iconsrc;
}
}
推荐答案
问题是 AsysForBitmap 在你读取下一个项目时没有完成工作,myBitmap 将与下一个图像重叠.
The issue is that AsysForBitmap is not finishing the job while you are reading the next item and myBitmap will be overlapped with the next image.
试着这样做
case XmlPullParser.START_TAG:
tagname = parser.getName();
if (parser.getName().equals(iconsrc)){
iconsrcVALUE = parser.getAttributeValue(null, "src");
SomeItem item = new SomeItem(displaynameValue, myBitmap);
item.setName(displaynameValue);
item.add(item);
item.getIconResource = new AsyncForBitmap().execute(iconsrcVALUE).get();
}
if (parser.getName().equals(displayname)) {
displaynameValue = parser.nextText();
}
break;
这篇关于XMLPullParser 中的位图项问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:XMLPullParser 中的位图项问题


基础教程推荐
- Android文本颜色不会改变颜色 2022-01-01
- 在 iOS 上默认是 char 签名还是 unsigned? 2022-01-01
- 使用 Ryzen 处理器同时运行 WSL2 和 Android Studio 2022-01-01
- 固定小数的Android Money Input 2022-01-01
- LocationClient 与 LocationManager 2022-01-01
- Android ViewPager:在 ViewPager 中更新屏幕外但缓存的片段 2022-01-01
- 如何使用 YouTube API V3? 2022-01-01
- 如何使 UINavigationBar 背景透明? 2022-01-01
- “让"到底是怎么回事?关键字在 Swift 中的作用? 2022-01-01
- :hover 状态不会在 iOS 上结束 2022-01-01