0

Android アプリに送信する JSON 文字列を生成する PHP コードがあります。この部分は機能します。問題は、アプリがその文字列をキャプチャして JSONArray オブジェクトに変換しようとするときです。主なアイデアは、そのデータを SQLite データベース内に格納することです。

JSON 文字列を取得するコードは次のとおりです。

public void getPostResponse(){
    try{
        br = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
        sb = new StringBuilder();
        line = null;
        while((line = br.readLine()) != null){
            sb.append(line+"\n");
        }
        is.close();
        result = sb.toString();
        Log.e("getPostResponse","result= "+sb.toString());
    }catch(Exception e){
        Log.e("log_tag","Error converting result "+e.toString());
    }
}

これは LogCat の結果です。

10-11 16:27:01.171: E/getPostResponse(9155): result= [{ "establecimientos":[]},{ "rutas":[]},{ "formularios":[]},{ "clientes":[]},{ "mediciones":[]}]

これがエラーがあると思う理由です。結果変数にはJSON文字列全体が含まれているはずですが、そうではありません。何か案は?

変数 br、sb、line、および result はグローバルに宣言されます。サーバーから送信された JSON は既に JSONArray ('[' で始まり ']' で終わる) ですが、これが問題の原因ですか?

これはjson文字列です:

[
    {
        "establecimientos": [
            {
                "idestablecimiento": "108",
                "nombre": "Establecimiento 123",
                "direccion": "632-8165 Non Road",
                "idruta": "104",
                "idempresa": "1004"
            },
            {
                "idestablecimiento": "102",
                "nombre": "Establecimiento XYZ",
                "direccion": "Ap #124-9882 Risus, Street",
                "idruta": "106",
                "idempresa": "1006"
            },
            {
                "idestablecimiento": "106",
                "nombre": "Unicasa La Candelaria",
                "direccion": "P.O. Box 898, 6831 Morbi Rd.",
                "idruta": "106",
                "idempresa": "1001"
            }
        ]
    },
    {
        "rutas": [
            {
                "idruta": "106",
                "nombre": "Petare"
            },
            {
                "idruta": "104",
                "nombre": "La Castellana"
            }
        ]
    },
    {
        "formularios": [
            {
                "idformulario": "100",
                "nombre": "Encuesta Libre",
                "idestablecimiento": "108"
            },
            {
                "idformulario": "100",
                "nombre": "Encuesta Libre",
                "idestablecimiento": "102"
            },
            {
                "idformulario": "100",
                "nombre": "Encuesta Libre",
                "idestablecimiento": "106"
            }
        ]
    },
    {
        "clientes": [
            {
                "idcliente": "1002",
                "nombre": "Sibelius",
                "idempresa": "1006"
            },
            {
                "idcliente": "1009",
                "nombre": "Lavasoft",
                "idempresa": "1004"
            },
            {
                "idcliente": "1000",
                "nombre": "Cakewalk",
                "idempresa": "1001"
            }
        ]
    },
    {
        "mediciones": [
            {
                "idformulario": "100",
                "idmedicion": "100",
                "texto": "1) FALTA DE PRODUCTO",
                "tipopregunta": "Seleccion Simple",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "101",
                "texto": "2) PRE VENDEDOR NO VISITA",
                "tipopregunta": "Si o No",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "102",
                "texto": "3) ENTREGADOR NO DESPACHA",
                "tipopregunta": "Si o No",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "103",
                "texto": "4) NEVERA FUERA DE SERVICIO",
                "tipopregunta": "Seleccion Simple",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "104",
                "texto": "5) NEVERA CONTAMINADA",
                "tipopregunta": "Seleccion Simple",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "105",
                "texto": "6) CLIENTE EXCLUSIVO DE LA COMPETENCIA",
                "tipopregunta": "Si o No",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "106",
                "texto": "7) FALTA DE MATERIAL POP EN PDV",
                "tipopregunta": "Si o No",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "107",
                "texto": "8) CLIENTE CERRADO",
                "tipopregunta": "Si o No",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "108",
                "texto": "9) NEGACIÓN POR PARTE DEL CLIENTE",
                "tipopregunta": "Si o No",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "109",
                "texto": "10) PRODUCTO VENCIDO",
                "tipopregunta": "Seleccion Simple",
                "tipodato": "String"
            },
            {
                "idformulario": "100",
                "idmedicion": "110",
                "texto": "11) PROMOCIONES ESPECIALES",
                "tipopregunta": "Si o No",
                "tipodato": "String"
            }
        ]
    }
]
4

1 に答える 1

0

post 呼び出しの HttpResponse を取得し、エンティティ文字列を取得して、新しい JSONObject を作成する方が簡単です。

//create an Uri
URI uri = new URI(string);
//or using URIUtils

HttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(uri);
HttpResponse response = client.execute(post);
String jsonString = EntityUtils.toString(response.getEntity());
JSONObject json = new JSONObject(jsonString);

そのため、json オブジェクトを操作および検査できます。例、JSONArray を取得する方法:

JSONArray array = json.getJSONArray("estabelecimentos");

[]のネト

于 2012-10-11T21:34:32.260 に答える