android解析json报空指针异常。

印第安囚徒 2012-04-10 03:56:49
代码如下

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();
}

}
}


...全文
412 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Anbrul 2012-04-10
  • 打赏
  • 举报
回复
我怎么没看到你的stu对象是在哪里new的?乱码是编码问题。[Quote=引用楼主 的回复:]
代码如下
Java code

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……
[/Quote]
qdkfriend 2012-04-10
  • 打赏
  • 举报
回复
首先 我觉得你客户端不该把UI线程和网络线程混在一起,希望能写成异步的
另外 你的json在网页显示是乱码,无非是编码的问题
印第安囚徒 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]
我怎么没看到你的stu对象是在哪里new的?乱码是编码问题。

引用楼主 的回复:
代码如下
Java code

package com.student.activity;

import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

……
[/Quote]

我都改的UTF-8的编码诶。
印第安囚徒 2012-04-10
  • 打赏
  • 举报
回复
服务端用的是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>

印第安囚徒 2012-04-10
  • 打赏
  • 举报
回复
还有一个就是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("remark",si.getRemark());
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();
}

}

}

印第安囚徒 2012-04-10
  • 打赏
  • 举报
回复
System.out.println(list.size());这里还能正常显示,到了System.out.println(stuName);这里就不能正常显示了,从服务器获取到json代码成功,能显示出来。

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧