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

来源:互联网 发布:redis session共享 php 编辑:程序博客网 时间:2024/06/14 10:04


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


一、在JavaEE项目中搭建环境

1. 导入相关jar包

2. 搭建相关的包和类


3.类中的方法简单实现

User:

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


UserDao:


UserDaoImpl:


JsonServlet:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <span style="white-space:pre">    </span>protected void doGet(HttpServletRequest request,  
  2.             HttpServletResponse response) throws ServletException, IOException {  
  3.         // 来自于数据库  
  4.         UserDao daoImpl = new UserDaoImpl();  
  5.         List<User> entities = daoImpl.findAll();  
  6.         // 把List集合转换成一个json的数据格式  
  7.         JSONArray jsonArray = JSONArray.fromObject(entities);  
  8.   
  9.         response.setContentType("application/json");// 响应类型 json的数据  
  10.         response.getWriter().write(jsonArray.toString());  
  11.         response.getWriter().close();  
  12.     }  
  13.   
  14.     protected void doPost(HttpServletRequest request,  
  15.             HttpServletResponse response) throws ServletException, IOException {  
  16.         doGet(request, response);  
  17.     }  

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

1. 导入jar包


2.  添加权限

3. 实现布局文件

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. <!-- MVC模式中的V层 -->  
  2.     <ListView  
  3.         android:id="@+id/lv_users"  
  4.         android:layout_width="match_parent"  
  5.         android:layout_height="wrap_content"  
  6.         android:layout_alignParentBottom="true" />  
4.MainActivity.java中的主要内容见如下详细代码:

[java] view plaincopy在CODE上查看代码片派生到我的代码片
  1. package www.csdn.net.activity;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.List;  
  5.   
  6. import org.apache.http.Header;  
  7. import org.json.JSONArray;  
  8. import org.json.JSONException;  
  9. import org.json.JSONObject;  
  10.   
  11. import android.app.Activity;  
  12. import android.os.Bundle;  
  13. import android.widget.ArrayAdapter;  
  14. import android.widget.ListView;  
  15. import android.widget.Toast;  
  16.   
  17. import com.loopj.android.http.AsyncHttpClient;  
  18. import com.loopj.android.http.JsonHttpResponseHandler;  
  19.   
  20. public class MainActivity extends Activity {  
  21.       
  22.     private ListView lv_users;  
  23.   
  24.     @Override  
  25.     protected void onCreate(Bundle savedInstanceState) {  
  26.         super.onCreate(savedInstanceState);  
  27.         setContentView(R.layout.activity_main);  
  28.   
  29.         lv_users = (ListView) findViewById(R.id.lv_users);  
  30.           
  31.         initData();//M层 //initData本身在一个子线程中处理  
  32.           
  33.     }  
  34.   
  35.     private void initData() {  
  36.         // 访问服务器端 获取json数据  
  37.         // 创建客户端对象  
  38.         AsyncHttpClient client = new AsyncHttpClient();  
  39.         String url = "http://172.16.237.227:8080/video/JsonServlet";  
  40.         Toast.makeText(this"发送请求到服务器", Toast.LENGTH_LONG).show();  
  41.         client.get(url, new JsonHttpResponseHandler() {  
  42.             // 返回JSONArray对象 | JSONObject对象  
  43.             @Override  
  44.             public void onSuccess(int statusCode, Header[] headers,  
  45.                     JSONArray response) {  
  46.                 super.onSuccess(statusCode, headers, response);  
  47.                 if (statusCode == 200) {  
  48.                     //存储数组变量  
  49.                     List<String> objects = new ArrayList<>();  
  50.                     for (int i = 0; i < response.length(); i++) {  
  51.                         try {  
  52.                             // 获取具体的一个JSONObject对象  
  53.                             JSONObject obj = response.getJSONObject(i);  
  54.                             objects.add(obj.getString("name"));  
  55.                         } catch (JSONException e) {  
  56.                             // TODO Auto-generated catch block  
  57.                             e.printStackTrace();  
  58.                         }  
  59.                     }  
  60.                     //C控制层主要就是对数据处理  
  61.                     ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, objects);  
  62.                     //设置显示的内容  
  63.                     lv_users.setAdapter(adapter);// C空置  
  64.                 }  
  65.             }  
  66.   
  67.         });  
  68.     }  
  69. }  

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()方法等。



0 0
原创粉丝点击