0

这是我的php代码

$titikPetaInti = array();
while($row = mysql_fetch_assoc($hasil2))
{
     $titikPetaInti[] = $row['koordinat'];
}

$data = "{titikPeta:".json_encode($titikPetaInti)."}";
echo $data;
?>

那么这里是我的 android 代码 xResultTitikPeta 是对 php 的结果请求

jObject = new JSONObject(xResultTitikPeta);
        JSONArray myArray1 = (JSONArray) jObject.getJSONArray("titikPeta");
        String[]titikPeta = new String[myArray1.length()];

        for(int a = 0; a < myArray1.length(); a++)
        {
            titikPeta[a] = myArray1.getJSONObject(a).toString();
        }
        teks1 = (TextView) findViewById(R.id.textView1);
        teks1.setText(Arrays.toString(titikPeta));

它在模拟器上显示 null 就像没有价值

- 编辑 -

我认为在解析代码时出现了一些错误,当我在 android 中显示 xResultTitikPeta 时,它给了我字符串结果

这是 xResultTitikPeta 的结果

{titikPeta:["-8.705378,115.225189","-8.56056700000000,115.42395100000","-8.57659700000000,115.40065300000","-8.55596300000000,115.41085700000","-8.51855200000000,115.491908000000","-8.54743200000000,115.41036800000","-8.56551100000000,115.45173900000","-8.44321000000000,115.616019000000"]}
4

3 回答 3

1

这是格式错误的JSON!键上没有双引号。

$data = "{titikPeta:".json_encode($titikPetaInti)."}";

而是这样做:

$data = '{"titikPeta":'.json_encode($titikPetaInti).'}';

编辑:

好的,删除手工制作的方法:

$data = json_encode(array("titikPeta"=>$titikPetaInti));
于 2012-06-13T01:27:46.527 回答
0

尝试

$data = "{\"titikPeta\":".json_encode($titikPetaInti)."}";
于 2012-06-13T01:50:20.693 回答
0

好的,我找到了你的错误!除了解决$data = json_encode(array("titikPeta" => $titikPetaInti));问题外,问题还在这里:

titikPeta[a] = myArray1.getJSONObject(a).toString();

的元素myArray1实际上是类型string并导致抛出异常,因此您需要:

titikPeta[a] = myArray1.getString(a);

这会产生以下输出:

[-8.705378,115.225189, -8.56056700000000,115.42395100000, -8.57659700000000,115.40065300000, -8.55596300000000,115.41085700000, -8.51855200000000,115.491908000000, -8.54743200000000,115.41036800000, -8.56551100000000,115.45173900000, -8.44321000000000,115.616019000000]

由于您的数组中的每个元素都是 form "-8.705378,115.225189",因此 JSON 解析器假定它们是字符串。如果将元素更改为"-8.705378","115.225189"还可以使用:

titikPeta[a] = Double.toString(myArray1.getDouble(a));

但是,第一个版本也可以使用。

注意:我个人的偏好是我将每个数组元素声明为:

{"x":-8.705378,"y":115.225189}
于 2012-06-13T04:28:27.573 回答