Pun*_*dia 7 java android web-services jaxb marshalling
我在java中创建了一个web服务,该方法返回一个字符串(XML格式的通用列表).我从Android使用这个web服务,我得到了这个字符串,但经过几次尝试后,Android模拟器在尝试反序列化字符串时崩溃了.这是我得到的字符串的示例:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<peliculas>
<pelicula>
<id>18329</id>
<poster>http://cache-cmx.netmx.mx/image/muestras/5368.rrr.jpg</poster>
<titulo>007 Operaci&oacute;n Skyfall</titulo>
</pelicula>
...
</peliculas>
Run Code Online (Sandbox Code Playgroud)
这是webservice中的类:
@XmlRootElement
public class Peliculas{
@XmlElement(name="pelicula")
protected List<Pelicula> peliculas;
public Peliculas(){ peliculas = new ArrayList<Pelicula>();}
public Peliculas(List<Pelicula> pe){
peliculas = pe;
}
public List<Pelicula> getList(){
return peliculas;
}
public void add(Pelicula pelicula) {
peliculas.add(pelicula);
}
}
Run Code Online (Sandbox Code Playgroud)
__ _ __ _ __ 编辑_ __ _ __ _ __ _ __ _ _
看起来你不能在Android上使用JAXB,并且有更好/更轻的库.所以我尝试了Simple XML.这是方法:
public Peliculas unmarshal(String xml) throws Exception{
Peliculas peliculas = new Peliculas();
Serializer serializer = new Persister();
StringBuffer xmlStr = new StringBuffer( xml );
peliculas = serializer.read(Peliculas.class, ( new StringReader( xmlStr.toString() ) ) );
return peliculas;
}
Run Code Online (Sandbox Code Playgroud)
但我得到这个异常,似乎无法保存对象中的数据:
11-12 20:30:10.898: I/Error(1058): Element 'Pelicula' does not have a match in class app.cinemexservice.Pelicula at line 3
Run Code Online (Sandbox Code Playgroud)
我使用 SAX 解析文件,然后手动将其转换为对象。这是代码:
\n\npublic List<Pelicula> unmarshal(String xml) throws Exception{ \n List<Pelicula> peliculas = new ArrayList<Pelicula>(); \n InputStream is = new ByteArrayInputStream(xml.getBytes("UTF-8"));\n XmlPullParser parser = Xml.newPullParser(); \n char[] c;\n String id="", titulo="", poster="", atributo="";\n int datos =0;\n try{ \n parser.setInput(is, "UTF-8"); \n int event = parser.next(); \n while(event != XmlPullParser.END_DOCUMENT) { \n if(event == XmlPullParser.START_TAG) { \n Log.d(TAG, "<"+ parser.getName() + ">"); \n atributo = parser.getName();\n for(int i = 0; i < parser.getAttributeCount(); i++) { \n Log.d(TAG, "\\t"+ parser.getAttributeName(i) + " = "+ parser.getAttributeValue(i)); \n } \n } \n if(event == XmlPullParser.TEXT&& parser.getText().trim().length() != 0) \n {\n Log.d(TAG, "\\t\\t"+ parser.getText());\n if (atributo=="id"){id=parser.getText(); datos++;}\n else if(atributo=="titulo"){titulo=parser.getText(); datos++;}\n else if(atributo=="poster"){poster=parser.getText(); datos++;}\n if(datos==3){peliculas.add(new Pelicula(id, titulo, poster)); datos=0;} \n }\n if(event == XmlPullParser.END_TAG) \n Log.d(TAG, "</"+ parser.getName() + ">"); \n event = parser.next(); \n\n is.close();\n }\n } catch(Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } \n for (Pelicula p : peliculas){\n Log.d("Pel\xc3\xadcula en lista: ", p.titulo);\n } \n return peliculas;\n }\nRun Code Online (Sandbox Code Playgroud)\n\n对于我的口味来说,它太长了,但我就是无法找出简单的 XML 来匹配我的类。
\n| 归档时间: |
|
| 查看次数: |
1447 次 |
| 最近记录: |