2014-01-15 57 views
4

我一直试图解决这个错误2天现在,搜索并尝试了多种编码类型从stackoverflow.com。我检查了我的JSON http://jsonformatter.curiousconcept.com/#jsonformatter。但是我仍然无法知道我的代码为什么这样做。我有3个文件。 MainACtivity.java应该从我的服务器上的test.json文件中获取信息,然后将其处理到Events.java。 Events.java只是显示信息,但应用程序并没有那么做。org.json.jsonarray无法转换为jsonobject错误

更新的代码在任何情况下都需要对此进行修改。

我的错误:

01-14 22:18:08.165: E/JSON Response:(419): > { "event":[ 
    01-14 22:18:08.165: E/JSON Response:(419):  { 
    01-14 22:18:08.165: E/JSON Response:(419):  "event_name":"Test Event", 
    01-14 22:18:08.165: E/JSON Response:(419):  "event_time":"7:00pm", 
    01-14 22:18:08.165: E/JSON Response:(419):  "event_price":"$15.00" 
    01-14 22:18:08.165: E/JSON Response:(419):  } 
    01-14 22:18:08.165: E/JSON Response:(419): ] 
    01-14 22:18:08.165: E/JSON Response:(419): } 
    01-14 22:18:08.175: E/Json Error(419): Error: org.json.JSONException: Value   [{"event_price":"$15.00","event_time":"7:00pm","event_name":"Test Event"}] at event of type  org.json.JSONArray cannot be converted to JSONObject 

MainActivity.java

package com.example.dba; 

import org.json.JSONException; 
import org.json.JSONObject; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 

public class MainActivity extends Activity 
{ 

String event_name, event_time, event_price; 
static JSONObject object =null; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    new PrefetchData().execute(); 
} 

/** 
* Async Task to make http call 
*/ 
private class PrefetchData extends AsyncTask<Void, Void, Void> 
{ 

    @Override 
    protected void onPreExecute() 
    { 
     super.onPreExecute();  
    } 

    @Override 
    protected Void doInBackground(Void... arg0) 
    { 

     JsonParser jsonParser = new JsonParser(); 
     String json = jsonParser.getJSONFromUrl("http://www.website/test.json"); 

     Log.e("JSON Response: ", "> " + json); 

     if (json != null) 
     { 
      try 
      { 
       JSONObject parent = new JSONObject(json); 
       JSONArray eventDetails = parent.getJSONArray("event"); 

       for(int i=0; i < eventDetails.length(); i++) 
       { 
        object = eventDetails.getJSONObject(i); 
        event_name = object.getString("event_name"); 
        event_time = object.getString("event_time"); 
        event_price = object.getString("event_price"); 

        Log.e("JSON", "> " + event_name + event_time + event_price); 
       } 
      } catch (JSONException e) 
       { 
       Log.e("Json Error", "Error: " + e.toString()); 
        e.printStackTrace(); 
       } 

     } 

     return null; 
    } 

    @Override 
    protected void onPostExecute(Void result) 
    {   
     super.onPostExecute(result); 

     Intent i = new Intent(MainActivity.this, Events.class); 
     i.putExtra("event_name", event_name); 
     i.putExtra("event_time", event_time); 
     i.putExtra("event_price", event_price); 
     startActivity(i); 

     // close this activity 
     finish(); 
    } 

} 

} 


} 
+0

这个错误意味着你试图将一个像[1,2,3]这样的JSON数组转换为JSON对象,如{“field”:“value”}。你有这行代码触发这个? – user2684301

回答

3

相关的代码改变 - 在doInBackground()MainActivity.java的:

JSONObject eventDetails = parent.getJSONObject("event"); 

到:

JSONArray eventDetails = parent.getJSONArray("event"); 
+0

这基本上是我所做的,然后我添加了一个for循环与静态对象。现在我正在从我的服务器获取json。感谢您的快速回复。 object = eventDetails。getJSONObject(ⅰ); \t \t event_name = object.getString(“event_name”); \t \t event_time = object.getString(“event_time”); \t \t event_price = object.getString(“event_price”); – Jayce

4

你来自服务器的JSON数组得到,你尝试将它转换成一个JSONObject。的

代替

JSONObject obj = new JSONObject(string); 

你应该做的

JSONArray obj = new JSONArray(string); 

,因为我们知道..

[= JSONArray

{=的JSONObject

所以

try 

    { 
      JSONArray jObj = new JSONArray(json); 
//other code 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 
+0

这对接受的答案有更多的解释。 –

0

你的代码只是解析JSON对象JSON数组不值。

要分析一个JSONObjects:

jsonobject = JSONfunctions.getJSONfromURL("URL Here"); 

要从一个JSONObjects解析JsonArray:

jsonarray = jsonobject.getJSONArray("Object name here"); 

在你的代码改变这个

JSONObject parent = new JSONObject(json); 
JSONObject eventDetails = parent.getJSONObject("event"); 

JSONObject parent = new JSONObject(json); 
JSONArray eventDetails = parent.getJSONArray("event"); 
+0

感谢您的快速回复。基本上我做了什么,并添加了一个静态对象的循环,它似乎工作。 – Jayce

相关问题