服务器采用JSON格式返回数据给安卓客户端

最近打算做一个酒店无线点餐的APP,需要将图片放在服务器端的文件夹下,客户端通过更新菜单按钮可以获得最新的菜品信息。要获取图片的信息首先需要得到图片的名称、对应的菜品价格以及图片所在的路径,因此需要在服务器端搜索文件夹下的所有图片并将数据打包成JSON格式转发给客户端,具体格式为[{name="菜名",price=价格,path="文件路径",category="菜品分类:如川菜、湘菜等"}]。服务器端采用servlet+jsp部署在Tomcat中,下面给出获取文件目录下所有图片信息并封装成JSON格式的代码。服务器端图片存储的目录如下所示。

package com.restaurant.utils;

import java.io.File;

public class JsonUtils {

    public static String getJson(String strPath) {
        StringBuilder builder = new StringBuilder();
        builder.append(‘[‘);
        File file = new File(strPath);
        File[] fileList = file.listFiles();
        for (int i = 0; i < fileList.length; i++) {
            if (fileList[i].isDirectory()) {
                File mFile = new File(fileList[i].getPath());
                File[] mFileList = mFile.listFiles();
                for (int j = 0; j < mFileList.length; j++) {
                    String name = "";
                    String price = "";
                    String path = "";
                    String category = "";
                    String str = mFileList[j].getName();
                    String[] strList = str.split("\\$");
                    name = strList[0];
                    strList = strList[1].split("\\.");
                    price = strList[0];
                    path = mFileList[j].getPath();
                    strList=path.split("\\\\");
                    path="";
                    for(String mstr:strList){
                        path=path+mstr+"\\\\";
                    }
                    path=path.substring(0, path.length()-2);
                    category = mFileList[j].getParent().substring(
                            mFileList[j].getParent().lastIndexOf("\\") + 1);
                    builder.append("{name:\"").append(name).append("\",");
                    builder.append("price:").append(price).append(‘,‘);
                    builder.append("path:\"").append(path).append("\",");
                    builder.append("category:\"").append(category)
                            .append("\"},");
                }
            }
        }
        builder.deleteCharAt(builder.length() - 1);
        builder.append(‘]‘);
        return builder.toString();

    }
}

创建一个Servlet文件在其doGet()方法中调用上面的getJson()方法,并将客户端请求转到一个JSP页面,在JSP中通过EL表达式获取出JSON字符串。

package com.restaurant.servlet;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.restaurant.utils.*;

/**
 * Servlet implementation class UpdatePictureServlet
 */
@WebServlet("/UpdatePictureServlet")
public class UpdatePictureServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static String strPath = "E:\\webTest\\Restaurant\\WebContent\\Pictures";

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        request.setAttribute("json", JsonUtils.getJson(strPath));
        request.getRequestDispatcher("/WEB-INF/page/jsondata.jsp").forward(request, response);

    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

JSP页面内容如下:

<%@ page language="java" contentType="text/plain; charset=UTF-8" pageEncoding="UTF-8"%>${json}

将项目部署到服务器上,在浏览器中输入:http://localhost:8080/Restaurant/UpdatePictureServlet回车之后的效果如下:

安卓客户端通过HTTP协议获取JSON数据,首先封装一个PictureBean对象,该对象用于接收解析出来的JSON格式,同时创建和该对象对应的数据库表,直接将对象列表存储在SQLite数据库中,方便本地读取。下面是从服务器获取JSON数据并存储在PictureBean对象中的程序代码:

package com.example.service;

import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;

import org.json.JSONArray;
import org.json.JSONObject;

import android.util.Log;

import com.example.domain.PictureBean;
import com.example.utils.StreamTool;

public class UptadePictureService {

    public static List<PictureBean> getJSONPictures() throws Exception {
        String path = "http://192.168.1.103:8080/Restaurant/UpdatePictureServlet";
        URL url = new URL(path);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setConnectTimeout(5000);
        conn.setRequestMethod("GET");
        if (conn.getResponseCode() == 200) {
            InputStream inStream = conn.getInputStream();
            return parseJSON(inStream);
        }
        return null;
    }

    /**
     * 解析JSON数据
     *
     * @param inStream
     * @return
     */
    private static List<PictureBean> parseJSON(InputStream inStream)
            throws Exception {
        List<PictureBean> Pictures = new ArrayList<PictureBean>();
        byte[] data = StreamTool.read(inStream);
        String json = new String(data);
        Log.d("MainActivity", json);
        JSONArray array = new JSONArray(json);
        for (int i = 0; i < array.length(); i++) {
            JSONObject jsonObject = array.getJSONObject(i);
            PictureBean picture = new PictureBean(jsonObject.getString("name"),
                    jsonObject.getInt("price"), jsonObject.getString("path"),
                    jsonObject.getString("category"));
            Pictures.add(picture);
        }
        return Pictures;
    }

}

以上就是就是把图片数据信息打包成JSON格式,以及安卓客户端获取图片信息并保存为PictureBean对象的全部过程,有关数据库方面的代码比较简单,这里不再贴出来。关于图片的下载以及界面显示部分的内容将在下一篇博客中进行介绍。

				
时间: 2024-12-20 05:13:56

服务器采用JSON格式返回数据给安卓客户端的相关文章

1.3WEB API 默认以json格式返回数据,同时定义时间格式,返回格式

首先我们知道,web api 是可以返回任意类型的,然后在输出的过程中转为(默认的)xml. 但是xml是比较费流量的,而且大多前端都是用json对接,所以我们也只能随大流,把它输出改成json. 不废话了,直接上代码,反正就这么点. public static class WebApiConfig { public static void Register(HttpConfiguration config) { config.MapHttpAttributeRoutes(); config.R

javascript 解析ajax返回的xml和json格式的数据

写个例子,以备后用 一.JavaScript 解析返回的xml格式的数据: 1.javascript版本的ajax发送请求 (1).创建XMLHttpRequest对象,这个对象就是ajax请求的核心,是ajax请求和响应的信息载体,单是不同浏览器创建方式不同 (2).请求路径 (3).使用open方法绑定发送请求 (4).使用send() 方法发送请求 (5).获取服务器返回的字符串   xmlhttpRequest.responseText; (6).获取服务端返回的值,以xml对象的形式存

在C#中通过使用Newtonsoft.Json库来解析百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据

百度地图地理编码(GeoCoder)服务接口返回的Json格式的数据,如下所示: http://api.map.baidu.com/geocoding/v3/?address=**省**市**区**路**号院**社区&output=json&ak=您的AK密钥 返回结果实例: { "status":0, "result": { "location":{"lng":116.79, "lat":

ASP.NET API(MVC) 对APP接口(Json格式)接收数据与返回数据的统一管理

话不多说,直接进入主题. 需求:基于Http请求接收Json格式数据,返回Json格式的数据. 整理:对接收的数据与返回数据进行统一的封装整理,方便处理接收与返回数据,并对数据进行验证,通过C#的特性对token进行验证,并通过时间戳的方式统一处理接收与返回的时间格式. 请求Json格式: { "Cmd": "login", "Token": "", "PageNo": 0, "OnePageNu

在IE中MVC控制器中返回JSON格式的数据时提示下载

最近做项目时,视图中用jquery.form.js异步提交表单时,接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("#formDoUpload").ajaxSubmit({                    type: "POST",                    url: "/controller/action/",  

asp.net MVC控制器中返回JSON格式的数据时提示下载

Asp.net mvc在接收的是JSON格式的数据,但是奇怪的是在IE中提示下载文件,其他浏览器中一切正常,下载后,里面的内容就是在控制器中返回的数据.代码如下: 视图中js代码: $("#form").ajaxSubmit({                    type: "POST",                    url: "/controller/action/",                    datatype: &

解决在IE中返回JSON格式的数据时提示下载的问题

如题,以ASP.NET MVC为例,解决办法如下: 控制器中: public JsonResult Test() { return Json(json, "text/html"); } 视图中: $.post("/controller/action/", function (data) { data = JSON.parse(data); }); 解决在IE中返回JSON格式的数据时提示下载的问题

struts2返回json格式的数据

描述:当前端使用ajax发送请求到action时,如果需要返回json格式的数据,如对象集合.具体做法如下: 前端代码: <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"

spring mvc接收参数方式,json格式返回请求数据

1 使用方法形参使用变量接收提交的数据 2 在方法的形参中使用模型接收数据 3 如果在提交的表单中有多个数据模型,需要创建一个新的Bean,里面的属性是要接收的对象变量. 4 接收提交的日期字符串,转换成Date类型.需要使用@InitBinder来转换 5 批量删除数据,使用数组接收要删除的id,在页面中使用相同name属性 6 批量提交,如何接收数据?需要新建一个Bean,List或者LinkedList/ArrayList来接收. 7 在两个不同的action方法之间执行转发.在retur