3

Android アプリでデータベースのデータにアクセスしたいと考えています。このために、PHP Web サービスと JSON 形式のデータを使用しています。Web サービスにデータを要求すると、次のような結果が得られます。

{"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 から 1 つの製品を読み取り、Android SQLite データベースに書き込み、次の製品を読み取り、データベースに書き込むなどです。

この例を見たことがありますが、これを使用すると、製品のリストを使用する必要があります。だから私の質問は、製品ごとにこのjsonarrayをどのように読むことができますか?

前もって感謝します。

4

1 に答える 1

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
于 2012-08-09T20:58:30.747 に答える