我想在Android应用中访问数据库中的数据。为此,我使用的是PHP Web服务和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对此非常有用。所以我想使用Jackson流式json解析器。我无法在我的应用程序中保留产品列表,因为这会占用大量内存。所以我想要做的是从json读取一个产品,在我的android SQLite数据库中写入,读取下一个产品,将其写入数据库等等。
我见过这个example,但如果我用这个,我就得使用一系列产品。所以我的问题是,我如何阅读这个jsonarray,逐个产品?
提前致谢。
答案 0 :(得分:3)
如果有人需要这个,这就是我如何解决它,从here学到的。
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