您的位置:首页 > 理论基础 > 计算机网络

android-async-http开源项目对服务器端返回JSON数据的处理

2015-05-05 01:12 861 查看


android-async-http开源项目对服务器端返回JSON数据的处理

一、在JavaEE项目中搭建环境

1. 导入相关jar包



2. 搭建相关的包和类



3.类中的方法简单实现

User:
声明以下属性,并实现无参构造器和有参构造器,以及各自的get和set方法



UserDao:



UserDaoImpl:



JsonServlet:

[java] view
plaincopy





<span style="white-space:pre"> </span>protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

// 来自于数据库

UserDao daoImpl = new UserDaoImpl();

List<User> entities = daoImpl.findAll();

// 把List集合转换成一个json的数据格式

JSONArray jsonArray = JSONArray.fromObject(entities);

response.setContentType("application/json");// 响应类型 json的数据

response.getWriter().write(jsonArray.toString());

response.getWriter().close();

}

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

doGet(request, response);

}

二、Android项目中的对服务器端返回JSON数据的处理

1. 导入jar包



2. 添加权限



3. 实现布局文件

[java] view
plaincopy





<!-- MVC模式中的V层 -->

<ListView

android:id="@+id/lv_users"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true" />

4.MainActivity.java中的主要内容见如下详细代码:

[java] view
plaincopy





package www.csdn.net.activity;

import java.util.ArrayList;

import java.util.List;

import org.apache.http.Header;

import org.json.JSONArray;

import org.json.JSONException;

import org.json.JSONObject;

import android.app.Activity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.Toast;

import com.loopj.android.http.AsyncHttpClient;

import com.loopj.android.http.JsonHttpResponseHandler;

public class MainActivity extends Activity {

private ListView lv_users;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

lv_users = (ListView) findViewById(R.id.lv_users);

initData();//M层 //initData本身在一个子线程中处理

}

private void initData() {

// 访问服务器端 获取json数据

// 创建客户端对象

AsyncHttpClient client = new AsyncHttpClient();

String url = "http://172.16.237.227:8080/video/JsonServlet";

Toast.makeText(this, "发送请求到服务器", Toast.LENGTH_LONG).show();

client.get(url, new JsonHttpResponseHandler() {

// 返回JSONArray对象 | JSONObject对象

@Override

public void onSuccess(int statusCode, Header[] headers,

JSONArray response) {

super.onSuccess(statusCode, headers, response);

if (statusCode == 200) {

//存储数组变量

List<String> objects = new ArrayList<>();

for (int i = 0; i < response.length(); i++) {

try {

// 获取具体的一个JSONObject对象

JSONObject obj = response.getJSONObject(i);

objects.add(obj.getString("name"));

} catch (JSONException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

//C控制层主要就是对数据处理

ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, objects);

//设置显示的内容

lv_users.setAdapter(adapter);// C空置

}

}

});

}

}

5. 实现效果如下图所示:



三、补充

1. JSONObject对象可以通过get("属性名"),getString("属性名"),getInt("属性名")等这些方法,来获取指定属性名的属性值。
例如:在此案例中可以通过System.out.println("序号:" + obj.getInt("id") + "姓名:"+ obj.getString("name") +"---密码:"+ obj.getString("pass") +"---"+ obj.get("regDate"));来验证一下结果。

2. 出现的bug原因可能有:

Internet权限没加,服务器没启动,访问服务器路径有错,没有获取控件对象,设置显示的内容应为lv_users.setAdapter()方法而不是setText()方法等。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐