質問

I have been trying to fix this error for 2 days now, searched and tried multiple coding types from stackoverflow.com. I have checked my JSON http://jsonformatter.curiousconcept.com/#jsonformatter. But I am still unable to find out why my code is doing this. I have 3 files. MainACtivity.java that should get the information from my test.json files on my server and then process it to the Events.java. Events.java just displays the information, but the app doesn't make it that far.

UPDATED CODE IN CASE ANYONE ELSE NEEDS THE FIX FOR THIS.

My Error:

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

}

}


}
役に立ちましたか?

解決 2

Relevant code to change - in doInBackground() of MainActivity.java:

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

to:

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

他のヒント

you get from the server a json array and you are try to convert it in a JsonObject.

instead of

JSONObject obj = new JSONObject(string);

you should do

JSONArray obj = new JSONArray(string);

as we know..

[ = JSONArray

and

{ = JSONObject

So

try 

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

Your code just parsing Json Objects not the values of Json Arrays.

To parse JsonObjects:

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

To parse JsonArray from the JsonObjects:

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

In your Code change this

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

to

JSONObject parent = new JSONObject(json);
JSONArray eventDetails = parent.getJSONArray("event");
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top