3

我想从我的 android 应用程序中的数据库访问数据。为此,我使用了 PHP 网络服务和 JSON 格式的数据。当我向网络服务询问数据时,我得到如下信息:

{"products":
  [
    {"product":["prod_id_1","prod_name_1","prod_barcode_1","prod_brand_1","prod_wrapper_1","12.00000"]},
    {"product":["prod_id_2","prod_name_2","prod_barcode_2","prod_brand_2","prod_wrapper_2","24.00000"]}
  ]
}

但有 1000 多种产品。显然, jsonObject 和 jsonArray 对此无能为力。所以我想使用杰克逊流式 json 解析器。我无法在我的应用程序中保留产品列表,因为这会消耗大量内存。所以我想做的是从json中读取一个产品,将其写入我的android SQLite数据库,读取下一个产品,将其写入数据库等等。

我看过这个例子,但如果我使用它,我必须使用产品列表。所以我的问题是,如何逐个产品地阅读这个 jsonarray?

提前致谢。

4

1 回答 1

3

如果有人需要这个,这就是我解决它的方法,从 这里学到的。

JsonFactory f = new JsonFactory();
JsonParser jp = f.createJsonParser( httpclient.execute(httppost, responseHandler) );

jp.nextToken();

while(jp.nextToken()!=JsonToken.END_OBJECT){
    jp.nextToken();
    while (jp.nextToken()!=JsonToken.END_ARRAY){
        jp.nextToken();
        while(jp.nextToken()!=JsonToken.END_OBJECT){
                String fieldname = jp.getCurrentName();

                while (jp.nextToken()!=JsonToken.END_ARRAY){                            
                       produto p_json = new produto(); //produto is my product class
                        p_json.id = Integer.parseInt(jp.getText());
                    jp.nextToken();
                    p_json.name = jp.getText();
                    jp.nextToken();

                    p_json.cod_barras = jp.getText(); //product barcode
                    jp.nextToken();
                    p_json.marca = jp.getText(); //product brand
                    jp.nextToken();

                    String formato = jp.getText(); //product wrapper
                    jp.nextToken();
                    p_json.formato = formato+"["+jp.getText()+"]"; //formatting as required by my database, as wrapper+"["+number+"]"

                    //The following line writes the product in the database...
                    bd.addProduto(p_json);
                    }
                }
            }
    }

    jp.close(); // ensure resources get cleaned up timely and
                            // properly
于 2012-08-09T20:58:30.747 回答