代码如下package com.student.activity;import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.json.JSONArray;
import org.json.JSONObject;import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;public class StuManagerActivity extends Activity {
private static final String TAG = "StuManagerActivity";
private List<HashMap<String, Object>> list = null;
private HashMap<String, Object> stu = null; private ListView listView = null;
private static String url = "http://192.168.1.103:8080/StudentServer/getJsonStu.action"; /** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); listView = (ListView) findViewById(R.id.stuList);

getServerData(url);
} public void getServerData(String url) {
// 提供默认的HttpClient实现
HttpClient client = new DefaultHttpClient();
HttpPost request; try {
request = new HttpPost(new URI(url));
HttpResponse response = client.execute(request);
// 判断请求是否成功
if (response.getStatusLine().getStatusCode() == 200) {
HttpEntity entity = response.getEntity();
if (entity != null) {
String out = EntityUtils.toString(entity, "UTF-8");
Log.i(TAG, out);
JSONArray jsonArray = new JSONArray(out);
System.out.println(jsonArray.length());
list = new ArrayList<HashMap<String, Object>>();
System.out.println(list.size());

for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = (JSONObject) jsonArray.get(i);
String stuName = jsonObject.getString("studentName");
String stuSex = jsonObject.getString("stuSex");
String phone = jsonObject.getString("phone");

stu.put("stuName", stuName);
stu.put("stuSex", stuSex);
stu.put("phone", phone);

System.out.println(stuName);

list.add(stu);
System.out.println(list.size()+"");
}
SimpleAdapter adapter = new SimpleAdapter(
StuManagerActivity.this, list, R.layout.item,
new String[] { "stuName", "stuSex", "phone" },
new int[] { R.id.stuName, R.id.stuSex, R.id.phone });

listView.setAdapter(adapter);
}
}
} catch (Exception e) {
e.printStackTrace();
Log.e(TAG, e.toString());
Toast.makeText(StuManagerActivity.this, "获取数据失败!", Toast.LENGTH_LONG).show();
} }
}

解决方案 »

  1.   

    System.out.println(list.size());这里还能正常显示,到了System.out.println(stuName);这里就不能正常显示了,从服务器获取到json代码成功,能显示出来。
      

  2.   

    还有一个就是json在网页上显示是乱码。但是查看源代码又能正常显示android上面也能显示
    服务端代码:package com.server.action;import java.io.IOException;
    import java.util.List;import net.sf.json.JSONArray;
    import net.sf.json.JSONObject;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;
    import com.server.dao.IStuInfoDao;
    import com.server.model.StudentInfo;
    import com.server.util.DateTimeUtil;public class StuInfoAction extends ActionSupport{
    private static final long serialVersionUID = -989477296829078690L; private IStuInfoDao IStuDao; public IStuInfoDao getIStuDao() {
    return IStuDao;
    } public void setIStuDao(IStuInfoDao iStuDao) {
    IStuDao = iStuDao;
    }

    public void getJson(){
    List<StudentInfo> list = IStuDao.queryAllStudent();
    JSONArray jsonArray = new JSONArray();
    int i=0;
    for (StudentInfo si : list) {
    JSONObject jsonObject = new JSONObject();
    jsonObject.put("re",si.getRe());
    jsonObject.put("email", si.getEmail());
    jsonObject.put("BirthDay", DateTimeUtil.TimestampToString(si.getBirthDay()));
    jsonObject.put("cardId", si.getCardId());
    jsonObject.put("phone", si.getPhone());
    jsonObject.put("stuSex", si.getStuSex());
    jsonObject.put("studentName", si.getStudentName());
    jsonObject.put("className", si.getClassInfo().getClassName());
    jsonObject.put("sid", si.getSid());

    jsonArray.add(i,jsonObject);
    i++;
    }
    try {
    ServletActionContext.getResponse().setCharacterEncoding("UTF-8");
    ServletActionContext.getResponse().getWriter().write(jsonArray.toString());
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

    }

    }
      

  3.   

    服务端用的是SSH三大框架做的。struts配置<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd">
    <struts>
    <package name="p1" extends="json-default" namespace="/">

    <action name="*Class" class="ClassInfoAction" method="{1}">
    <result type="json"></result>
    </action>

    <action name="*Stu" class="StuInfoAction" method="{1}">
    <result type="json"></result>
    </action> <action name="*User" class="UserInfoAction" method="{1}">
    <result type="json"></result>
    </action>

    </package>
    </struts>    
      

  4.   

    首先 我觉得你客户端不该把UI线程和网络线程混在一起,希望能写成异步的
    另外 你的json在网页显示是乱码,无非是编码的问题
      

  5.   

    我怎么没看到你的stu对象是在哪里new的?乱码是编码问题。
      

  6.   


    我都改的UTF-8的编码诶。