Java 如何在android中从web服务在listview中显示数据

Java 如何在android中从web服务在listview中显示数据,java,android,Java,Android,my webservice以以下格式返回数据 ab cdef 我必须在listview中显示返回数据,这里是我的welcome.xml,我必须在其中显示数据 welcome.xml <?xml version="1.0" encoding="utf-8" ?> - <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_pare

my webservice以以下格式返回数据

ab cdef 我必须在listview中显示返回数据,这里是我的welcome.xml,我必须在其中显示数据

welcome.xml

  <?xml version="1.0" encoding="utf-8" ?> 
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">
  <ImageView android:id="@+id/welcome" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/main" android:layout_gravity="center_horizontal" /> 
  - 
- <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:id="@+id/Relative01">
  <ListView android:id="@+id/lvevent" android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_below="@+id/welcome" android:background="@drawable/wel_bg" android:layout_marginBottom="50dip" /> 
  </RelativeLayout>
- <TableLayout android:layout_height="fill_parent" android:layout_width="fill_parent" android:layout_below="@+id/Relative01">
- <TableRow>
  <Button android:id="@+id/btn_index" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/cap_button" android:paddingRight="15dip" android:layout_marginRight="50dip" /> 
  <Button android:id="@+id/btn_event" android:layout_height="wrap_content" android:layout_width="wrap_content" android:background="@drawable/button" android:layout_toRightOf="@+id/btn_index" android:paddingLeft="25dip" android:layout_marginLeft="30dip" /> 
  </TableRow>
  </TableLayout>
  </LinearLayout>

- 
- 
- 
- 
- 
如何在listview中显示数据

下面是我用于解析器的代码:

MYXMLHandler.java:

package org.parsing;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;



public class MyXMLHandler extends DefaultHandler{
 Boolean currentElement = false;
 String currentValue = null;
 public static SitesList sitesList = null;

 public static SitesList getSitesList() {
  return sitesList;
 }

 public static void setSitesList(SitesList sitesList) {
  MyXMLHandler.sitesList = sitesList;
 }

 /** Called when tag starts ( ex:- <name>AndroidPeople</name> 
  * -- <name> )*/
 @Override
 public void startElement(String uri, String localName, String qName,
   Attributes attributes) throws SAXException {

  currentElement = true;

  if (localName.equals("content"))
  {
   /** Start */ 
   sitesList = new SitesList();
  } /*else if (localName.equals("website")) {
   *//** Get attribute value *//*
   String attr = attributes.getValue("category");
   sitesList.setCategory(attr);
  }*/

 }

 /** Called when tag closing ( ex:- <name>AndroidPeople</name> 
  * -- </name> )*/
 @Override
 public void endElement(String uri, String localName, String qName)
   throws SAXException {

  currentElement = false;

  /** set value */ 
  if (localName.equalsIgnoreCase("title"))
   sitesList.setTitle(currentValue);
  else if (localName.equalsIgnoreCase("description"))
   sitesList.setDescription(currentValue);

 }

 /** Called to get tag characters ( ex:- <name>AndroidPeople</name> 
  * -- to get AndroidPeople Character ) */
 public void characters(char[] ch, int start, int length)
   throws SAXException {

  if (currentElement) {
   currentValue = new String(ch, start, length);
   currentElement = false;
  }

 }


}
package-org.parsing;
导入org.xml.sax.Attributes;
导入org.xml.sax.SAXException;
导入org.xml.sax.helpers.DefaultHandler;
公共类MyXMLHandler扩展了DefaultHandler{
布尔currentElement=false;
字符串currentValue=null;
公共静态站点列表SitesList=null;
公共静态站点列表getSitesList(){
返回站点列表;
}
公共静态无效集合站点列表(站点列表站点列表){
MyXMLHandler.sitesList=sitesList;
}
/**标记启动时调用(例如:-AndroidPeople
* --  )*/
@凌驾
public void startElement(字符串uri、字符串localName、字符串qName、,
属性)引发SAX异常{
currentElement=true;
if(localName.equals(“内容”))
{
/**开始*/
sitesList=新建sitesList();
}/*else if(localName.equals(“网站”)){
*//**获取属性值*//*
字符串attr=attributes.getValue(“类别”);
sitesList.setCategory(属性);
}*/
}
/**标记关闭时调用(例如:-AndroidPeople
* --  )*/
@凌驾
公共void endElement(字符串uri、字符串localName、字符串qName)
抛出SAX异常{
currentElement=false;
/**设定值*/
if(localName.equalsIgnoreCase(“标题”))
sitesList.setTitle(当前值);
else if(localName.equalsIgnoreCase(“说明”))
SiteList.setDescription(当前值);
}
/**调用以获取标记字符(例如:-AndroidPeople
*——获得男性化(人物性格)*/
公共无效字符(字符[]ch,整数开始,整数长度)
抛出SAX异常{
if(当前元素){
currentValue=新字符串(ch、开始、长度);
currentElement=false;
}
}
}
SitesList.java:

package org.parsing;

import java.util.ArrayList;

public class SitesList {

 /** Variables */
 private ArrayList<String> title = new ArrayList<String>();
 private ArrayList<String> description = new ArrayList<String>();
 //private ArrayList<String> category = new ArrayList<String>();


 /** In Setter method default it will return arraylist 
  *  change that to add  */

 public ArrayList<String> getTitle() {
  return title;
 }

 public void setTitle(String title) {
  this.title.add(title);
 }

 public ArrayList<String> getDescription() {
  return description;
 }

 public void setDescription(String description) {
  this.description.add(description);
 }

 /*public ArrayList<String> getCategory() {
  return category;
 }

 public void setCategory(String category) {
  this.category.add(category);
 }
*/
}
package-org.parsing;
导入java.util.ArrayList;
公共类站点列表{
/**变数*/
私有ArrayList title=新ArrayList();
私有ArrayList description=新ArrayList();
//私有ArrayList类别=新建ArrayList();
/**在Setter方法默认值中,它将返回arraylist
*将其更改为添加*/
公共数组列表getTitle(){
返回标题;
}
公共无效集合标题(字符串标题){
本.title.add(title);
}
公共ArrayList getDescription(){
返回说明;
}
公共void集合描述(字符串描述){
本.description.add(description);
}
/*公共阵列列表getCategory(){
退货类别;
}
公共无效集合类别(字符串类别){
本.category.add(category);
}
*/
}
XMLParsingExample.java:

package org.parsing;

import java.net.URL;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.ContentHandler;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;


import android.app.Activity;
import android.os.Bundle;
import android.widget.LinearLayout;
import android.widget.TextView;

public class XMLParsingExample extends Activity {
 /** Create Object For SiteList Class */
 SitesList sitesList = null;

 /** Called when the activity is first created. */
 @Override
 public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.main);

  /** Create a new layout to display the view */
  LinearLayout layout = new LinearLayout(this);
  layout.setOrientation(1);

  /** Create a new textview array to display the results */
  TextView title[];
  TextView description[];
  //TextView category[];

  try {

   /** Handling XML */
   SAXParserFactory spf = SAXParserFactory.newInstance();
   SAXParser sp = spf.newSAXParser();
   XMLReader xr = sp.getXMLReader();

   /** Send URL to parse XML Tags */
   URL sourceUrl = new URL(
     "http://208.109.97.179:1010/webservices/newsevents.php");

   /** Create handler to handle XML Tags ( extends DefaultHandler ) */
   MyXMLHandler myXMLHandler = new MyXMLHandler();
   xr.setContentHandler((ContentHandler) myXMLHandler);
   xr.parse(new InputSource(sourceUrl.openStream()));

  } catch (Exception e) {
   System.out.println("XML Pasing Excpetion = " + e);
  }

  /** Get result from MyXMLHandler SitlesList Object */
  sitesList = MyXMLHandler.sitesList;

  /** Assign textview array lenght by arraylist size */
  title = new TextView[sitesList.getTitle().size()];
  description = new TextView[sitesList.getDescription().size()];
  //category = new TextView[sitesList.getName().size()];

  /** Set the result text in textview and add it to layout */
  for (int i = 0; i < sitesList.getTitle().size(); i++) {
   title[i] = new TextView(this);
   title[i].setText("Title = "+sitesList.getTitle().get(i));
   description[i] = new TextView(this);
   description[i].setText("Website = "+sitesList.getDescription().get(i));
   //category[i] = new TextView(this);
   //category[i].setText("Website Category = "+sitesList.getCategory().get(i));

   layout.addView(title[i]);
   layout.addView(description[i]);
   //layout.addView(category[i]);
  }

  /** Set the layout view to display */
  setContentView(layout);

 }

}
package-org.parsing;
导入java.net.URL;
导入javax.xml.parsers.SAXParser;
导入javax.xml.parsers.SAXParserFactory;
导入org.xml.sax.ContentHandler;
导入org.xml.sax.InputSource;
导入org.xml.sax.XMLReader;
导入android.app.Activity;
导入android.os.Bundle;
导入android.widget.LinearLayout;
导入android.widget.TextView;
公共类XMLParsingExample扩展活动{
/**为SiteList类创建对象*/
SitesList SitesList=null;
/**在首次创建活动时调用*/
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
/**创建新布局以显示视图*/
LinearLayout布局=新的LinearLayout(本);
布局。设置方向(1);
/**创建新的textview数组以显示结果*/
文本视图标题[];
文本视图描述[];
//文本视图类别[];
试一试{
/**处理XML*/
SAXParserFactory spf=SAXParserFactory.newInstance();
SAXParser sp=spf.newSAXParser();
XMLReader xr=sp.getXMLReader();
/**发送URL以解析XML标记*/
URL sourceUrl=新URL(
"http://208.109.97.179:1010/webservices/newsevents.php");
/**创建处理XML标记的处理程序(扩展DefaultHandler)*/
MyXMLHandler MyXMLHandler=新的MyXMLHandler();
xr.setContentHandler((ContentHandler)myXMLHandler);
parse(新的InputSource(sourceUrl.openStream());
}捕获(例外e){
System.out.println(“XML-Pasing expetion=“+e”);
}
/**从MyXMLHandler SitleList对象获取结果*/
sitesList=MyXMLHandler.sitesList;
/**按arraylist大小指定textview数组长度*/
title=新文本视图[sitesList.getTitle().size()];
description=新文本视图[sitesList.getDescription().size()];
//category=新文本视图[sitesList.getName().size()];
/**在textview中设置结果文本并将其添加到布局*/
对于(int i=0;i

检查代码后,告诉我哪里错了,并告诉正确答案。

一种解决方案是,解析来自web服务的XML响应,并将解析后的数据存储在数组中。然后只需使用数组适配器填充ListView。

一种解决方案是,解析来自web服务的XML响应,并将解析后的数据存储在数组中。然后简单地使用数组适配器填充列表视图。

谢谢你的回答。正如你所看到的,我已经解析了我的数据。因此,请告诉我如何将它们存储在数组中并在适配器中显示。使用类似这样的东西;setListAdapter(新的ArrayAdapter(getBaseContext(),R.layout.bulleted_列表_项,R.id.listItemDisplay,