在我的应用程序中,我试图从存储在web中的xml文件中形成一个网格视图。
以下是我的代码
grid = (GridView)findViewById(R.id.gridView1);
imageXMLfn();
grid.setAdapter(new ImageAdapter(this));
private void imageXMLfn()
{
try
{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringComments(true);
factory.setCoalescing(true);
factory.setNamespaceAware(false);
factory.setValidating(false);
DocumentBuilder parser = factory.newDocumentBuilder();
URL url = new URL(UserManual.IMAGE_URL);
Log.e("ViewImage3",""+UserManual.IMAGE_URL);
Document document= parser.parse(new InputSource(url.openStream()));
NodeList sections = document.getElementsByTagName("application");
numSections = sections.getLength();
for (int i = 0; i < numSections; i++)
{
Element section = (Element) sections.item(i);
if(section.hasChildNodes()==true)
{
NodeList section1=section.getChildNodes();
for(int j=0;j<section1.getLength();j++)
{
if(section1.item(j).hasChildNodes()==true)
{
for(int k=0;k<section1.item(j).getChildNodes().getLength();k++)
{
xmlvalue=String.valueOf(section1.item(j).getChildNodes().item(k).getNodeValue()).trim();
arl.add(xmlvalue);
}
}
}
}
}
}
catch(Exception e)
{
System.out.println(e);
Log.e("ViewImage Error1",e.getMessage());
}
Iterator<String> itr = arl.listIterator();
int z=0,x=0,increment=0;
while (itr.hasNext())
{
id = itr.next();
img = img+id;
z++;
}
}
public class ImageAdapter extends BaseAdapter
{
private Context myContext;
private String[] myRemoteImages = {id};
public ImageAdapter(Context c)
{
this.myContext = c;
}
}要么我只能得到存储在该url中的第一张图像,要么我不会得到任何其他图像。
以下是我试图从中获取图像的链接
http://94.23.207.167/websiteIphone/Admin/XML/Santa.xml发布于 2011-06-08 16:09:39
你的代码并不完整,所以很难给出一个确切的答案,但是在while循环的末尾,如果你赋值的是imageXMLfn,那就是id = it.next()。然后,图像适配器只使用id,它被设置为迭代器中的最后一个值。假设arl是ArrayList<String>类型的类中的一个字段,它可能可以通过以下方法解决:
public class ImageAdapter extends BaseAdapter
{
private Context myContext;
private String[] myRemoteImages = arl.toArray(new String[arl.size()]);
public ImageAdapter(Context c)
{
this.myContext = c;
}
}但是,您的代码在这方面确实不完整,所以我不确定这是否会起作用。
发布于 2012-04-27 00:13:50
对于同样的问题,我发现的最多的是这个。懒惰地在后台加载你的图片。在onpostexecute中,根本不显示任何图像,因为当抛出屏幕时,当前显示就会像多媒体幻灯片一样变得疯狂,图像会时断时续地闪烁,可能会错误地更新。然后我发现,如果对gridview变量执行Fling检测,例如:
mPhotoView.setOnScrollListener(new OnScrollListener() {
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
// TODO Auto-generated method stub
}
public void onScrollStateChanged(AbsListView view, int scrollState) {
// TODO Auto-generated method stub
if(scrollState != SCROLL_STATE_IDLE) {
mAdapter.setFlinging(true);
} else {
mAdapter.setFlinging(false);
}
int first = view.getFirstVisiblePosition();
int count = view.getChildCount();
if (scrollState == SCROLL_STATE_IDLE || (first + count >
mAdapter.getCount()) ) {
mPhotoView.invalidateViews();
}
}
}); invalidateViews将刷新新下载的图像。此外,在调用Lazy后台加载器时,在进程启动后,我加载了一个占位符位图。我现在只需要找到一种方法来获取一些剩余的占位符图像,这些图像不知何故会在一些卷轴上找到方法,以便在图像可用时进行更新。Lazy Loaders在互联网上随处可见,他们认为这是一种比上面的代码更好的加载远程图像的方法。这是Androider试图完成的最棘手的事情之一。我花的时间和我遇到的所有其他“陷阱”一样长。希望这能帮你理清头绪。祝你编码愉快。
https://stackoverflow.com/questions/6047284
复制相似问题