使用android读取web服务时出错

使用android读取web服务时出错,android,json,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,

我试图从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());
        }
    }
}
私有类ReadJSONFeedTask扩展了异步任务
{
受保护的字符串doInBackground(字符串…URL){
返回readJSONFeed(URL[0]);
}
受保护的void onPostExecute(字符串结果){
试一试{
JSONObject JSONObject=新JSONObject(结果);
JSONObject ProximosPartidos=
新的JSONObject(JSONObject.getString(“ProximoPartido”);
Toast.makeText(getBaseContext(),
ProximosPartidos.getString(“对手”)+
“-”+ProximosPartidos.getString(“fecha”),
吐司。长度(短)。show();
}捕获(例外e){
d(“ReadJSONFeedTask”,例如getLocalizedMessage());
}
}
}
这就是我得到的错误:

org.json.JSONArray类型的值[{“hora”:“21.15”,“estado”:“Pendiente”,“fecha”:“Viernes 30”,“rival”:“National”,“cancha”:“Stockolmo”}]不能转换为JSONObject

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

变化

  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();

作为结果的值
JsonArray
而不是
JSONObject

编辑

用于检查Json中是否存在密钥。如果此对象具有名称映射,则返回true

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

您的JSONObject实际上是一个JSONArray,因为它以“[]开头``

只需像这样解析它:

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

然后剩下的就行了

谢谢你的回复!我替换了那段代码,现在我得到了这个错误:{“ProximoPartido”:[{“rival”:“Nacional”,“cancha”:“Stockolmo”,“hora”:“21.15”,“fecha”:“Viernes 30”,“estado”:“Pendiente”}]}@Bruno很乐意帮忙,如果这个答案对你有帮助,那么别忘了接受它。好的,我做到了:顺便问一下:你知道这个新错误是什么意思吗?谢谢@布鲁诺,请详细解释一下,我把我的代码换成了你刚刚发布的代码,现在我得到了一个错误:“{”ProximoPartido:[{”rival:“Nacional”,“cancha:“Stockolmo”,“hora:“21.15”,“fech:”没有值‌​a:“维也纳30号”,“埃斯塔多”:“彭迪恩”}]}”。我不知道这个错误是什么意思。还有,这里的零是什么意思:=data.getJSONObject(0)?
JSONObject jsonObject = new JSONObject(result);
JSONObject ProximosPartidos =
                new JSONObject(jsonObject.getJSONArray("ProximoPartido").getJSONObject(0));