我一直在尝试修复此错误2天,搜索并尝试了stackoverflow.com中的多种编码类型。我检查了我的JSON http://jsonformatter.curiousconcept.com/#jsonformatter。但我仍然无法找出我的代码为什么这样做。我有3个文件。 MainACtivity.java应该从我的服务器上的test.json文件中获取信息,然后将其处理到Events.java。 Events.java只显示信息,但应用程序没有那么远。
更新后的任何人都需要更新代码。
我的错误:
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 :(得分: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());
}
答案 1 :(得分:3)
要更改的相关代码 - doInBackground()
MainActivity.java
:
JSONObject eventDetails = parent.getJSONObject("event");
为:
JSONArray eventDetails = parent.getJSONArray("event");
答案 2 :(得分:0)
您的代码只是解析Json Objects而不是Json Arrays的值。
解析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");