当前位置: 代码迷 >> Android >> 关于android 手机端与服务器端通信有关问题
  详细解决方案

关于android 手机端与服务器端通信有关问题

热度:129   发布时间:2016-05-01 13:07:09.0
关于android 手机端与服务器端通信问题?
android手机端读取服务器端数据。服务器端已xml的形式发送的数据,手机端用DOM解析xml的方法,读取数据并保存到SQLite中,源代码如下:
Java code
    private void update() {           String urlStr = HttpUtil.BASE_URL + "servlet/UpdateServlet";         URLConnection conn  = null ;         InputStream in = null;         DocumentBuilderFactory factory = null;         DocumentBuilder builder = null;         Document doc = null;         Uri uri1 = null;         ContentResolver cr = null;         NodeList nl = null;                 try {                    URL url = new URL(urlStr);            conn = url.openConnection();            in = conn.getInputStream();            factory = DocumentBuilderFactory.newInstance();                builder = factory.newDocumentBuilder();        }catch (Exception e1) {             System.out.println("e1.toString()---->>>>"+e1.toString());        }                        try {             doc = builder.parse(in);        }catch (Exception e2) {             System.out.println("e2.toString()----->>>>"+e2.toString());        }                        try {                     nl = doc.getElementsByTagName("menu");            cr = getContentResolver();                uri1 = Menus.CONTENT_URI;            cr.delete(uri1, null, null);              // 循环将数据保存到SQLite            for (int i = 0; i < nl.getLength(); i++) {                                ContentValues values = new ContentValues();                int id = Integer.parseInt(doc.getElementsByTagName("id").item(i).getFirstChild().getNodeValue());    item(i).getFirstChild().getNodeValue());                String name = doc.getElementsByTagName("name").item(i).getFirstChild().getNodeValue();                                    // 添加到ContenValues对象                values.put("_id", id);                values.put("name", name);                 cr.insert(uri1, values);                                        }        }catch (Exception e3) {             System.out.println("e3.toString()---->>>"+e3.toString());        }}

捕获到异常:
10-19 08:51:29.405: I/System.out(18908): e2.toString()----->>>>org.xml.sax.SAXParseException: name expected (position:START_TAG <null>@3:2 in [email protected]
10-19 08:51:29.405: I/System.out(18908): e3.toString()---->>>java.lang.NullPointerException

第一个问题:看异常,貌似是SAX解析XML文件出的异常,但是我用的是DOM解析啊。第二个问题:第一个try/catch块未捕获到异常,是不是代表正确读取到了输入流?

------解决方案--------------------
xml解析出错,调试
Java code
try {} catch (SAXParseException e) {    e.printStackTrace();}
------解决方案--------------------
不成功,解析错误,守先我会怀疑过来的数据是不是真正意义xml输出看一下
调用解析方法是否正确,而不是直接看结果
你看下这个例子吧,和你的差不多
http://blog.csdn.net/wong_judy/article/details/5854888
------解决方案--------------------
建议:你可以将远程的文件读写到本地,然后在本地解析,由此来判定后台返回的是不是正确的xml格式。
------解决方案--------------------
应该是服务器传过来的数据不符合你的解析规范吧。
直接从获得的InputStream里读取数据然后打印出来,看看是否正确。
  相关解决方案