一、在JavaEE项目中搭建环境
1. 导入相关jar包
2. 搭建相关的包和类
3.类中的方法简单实现
User:
声明以下属性,并实现无参构造器和有参构造器,以及各自的get和set方法UserDao:
UserDaoImpl:
JsonServlet:
<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. 实现布局文件
<!-- 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中的主要内容见如下详细代码:
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()方法等。