使用android读取Web服务时出错

时间:2014-07-17 17:31:23

标签: android json

我试图从Web服务中读取一些JSON数据并在Toast中显示它。 这是我试图阅读的JSON数组:

{"ProximoPartido":[{"rival":"Nacional","cancha":"Stockolmo","hora":"21.15","fecha":"Viernes 30","estado":"Pendiente"}]}

这是我写的代码:

private class ReadJSONFeedTask extends AsyncTask
        <String, Void, String> {
    protected String doInBackground(String... urls) {
        return readJSONFeed(urls[0]);
    }

    protected void onPostExecute(String result) {
        try {
            JSONObject jsonObject = new JSONObject(result);
            JSONObject ProximosPartidos =
                    new JSONObject(jsonObject.getString("ProximoPartido"));

            Toast.makeText(getBaseContext(),
                    ProximosPartidos.getString("rival") +
                            " - " + ProximosPartidos.getString("fecha"),
                    Toast.LENGTH_SHORT).show();
        } catch (Exception e) {
            Log.d("ReadJSONFeedTask", e.getLocalizedMessage());
        }
    }
}

这是我得到的错误:

  

价值[{&#34; hora&#34;:&#34; 21.15&#34;,&#34; estado&#34;:&#34; Pendiente&#34;,&#34; fecha&#34 ;:&#34; Viernes 30&#34;,&#34;竞争对手&#34;:&#34; Nacional&#34;,&#34; cancha&#34;:&#34; Stockolmo&#34;}]类型org.json.JSONArray无法转换为JSONObject

知道我做错了什么吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

更改

  JSONObject jsonObject = new JSONObject(result);
  JSONObject ProximosPartidos = new JSONObject(jsonObject.getString("ProximoPartido"));
  Toast.makeText(getBaseContext(),ProximosPartidos.getString("rival") +
                " - " + ProximosPartidos.getString("fecha"),Toast.LENGTH_SHORT).show();

  JSONObject jsonObject = new JSONObject(result);
  JSONArray data = jsonObject.getJSONArray("ProximoPartido");
  JSONObject ProximosPartidos =data.getJSONObject(0);
  Toast.makeText(getBaseContext(),ProximosPartidos.getString("rival") +                                                   
               " - " + ProximosPartidos.getString("fecha"),Toast.LENGTH_SHORT).show();

结果的值为JsonArray而不是JSONObject

修改

使用has检查Json中是否存在密钥。如果此对象具有name的映射,则返回true。

  if (ProximosPartidos.has("rival") && ProximosPartidos.has("fecha")) {
       Toast.makeText(getBaseContext(),ProximosPartidos.getString("rival") +                                                   
                   " - " + ProximosPartidos.getString("fecha"),Toast.LENGTH_SHORT).show();         
      }

答案 1 :(得分:0)

你的JSONObject实际上是一个JSONArray,因为它以`[]``

开头

只需解析它:

JSONObject jsonObject = new JSONObject(result);
JSONObject ProximosPartidos =
                new JSONObject(jsonObject.getJSONArray("ProximoPartido").getJSONObject(0));

然后其余的应该工作