前提:最近在做一个android小软件,想先自己写个简单的服务器进行测试,然后就出现下面的问题。
服务器部分代码(经测试在网页上可以显示封装后的数据)
try
{
ArrayList<Map<String,String>> list=new ArrayList<Map<String,String>>();
String sql="select name from Conn_List where department='"+part+"'";
conn=Sqlcon.getConnection();
stmt=conn.prepareStatement(sql);
rs=stmt.executeQuery();
while(rs.next())
{
Map<String,String> map=new HashMap<String,String>();
map.put("name", rs.getString("name"));
list.add(map);
}
JSONStringer stringer=new JSONStringer();
stringer.array();
for(Map<String,String> map:list)
{
stringer.object().key("name").value(map.get("name")).endObject();
}
stringer.endArray();
response.getOutputStream().write(stringer.toString().getBytes("UTF-8"));  
response.setContentType("text/json; charset=UTF-8"); 
}
android客户端部分代码(解析过程,最终返回一个list,将list放入我自己写好的自定义继承adapter)
private ArrayList<Map<String,String>> GetJson() throws Exception
{
ArrayList<Map<String,String>> list=new ArrayList<Map<String,String>>();
URL url=new URL("http://192.168.1.109:8080/ServletServer/ListServlet");
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setRequestMethod("GET");
if(conn.getResponseCode()==200)
{
InputStream in=conn.getInputStream();//获取数据
list=parseJSON(in);//解析数据
}
return list;
}
private ArrayList<Map<String,String>> parseJSON(InputStream in) throws Exception
{
ArrayList<Map<String,String>> list=new ArrayList<Map<String,String>>();
Map<String,String> map=null;
String strResult=read(in);//转换为字符串数据
JSONArray array=new JSONArray(strResult);******************************报错处
for(int i=0;i<array.length();i++)
{
JSONObject object=array.getJSONObject(i);
map=new HashMap<String,String>();
map.put("name", object.getString("name"));
list.add(map);
}
return list;
}
private String read(InputStream in) throws Exception 

ByteArrayOutputStream bout=new ByteArrayOutputStream();
byte[] buf=new byte[4096];
int len=-1;
while((len=in.read(buf,0,4096))!=-1)
{
bout.write(buf,0,len);
}
buf=null;
return new String(bout.toByteArray(),"UTF-8");
}
报错部分先是一段黄色报错,内容是End of input at character 0 of,位置就是上面提到的报错处。
接下去是一段红色报错,内容是在我的自定义继承adapter里面的getCount()有空指针,而getCount()里面的内容是return list.size();。androidjsonservlet交互服务器

解决方案 »

  1.   

    应该是编码格式的问题,
    最好转化成base64编码格式能避免这种编码上的问题。
      

  2.   

    在服务器端,对string进行base64封装,在客户端再用base64解码。程序都不用动,只是增加一层编码封装。
    我用过的觉得还是base64最稳定最可靠。
      

  3.   

    已经解决了,是因为我的发送和接收过程没有在同一个activity里进行的缘故,我想当然以为这个activity发送到服务器,然后跳转到下一个activity再接收了