Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/192.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用GSON Android解析json时出现空指针异常_Android_Eclipse_Json_Android Asynctask_Gson - Fatal编程技术网

使用GSON Android解析json时出现空指针异常

使用GSON Android解析json时出现空指针异常,android,eclipse,json,android-asynctask,gson,Android,Eclipse,Json,Android Asynctask,Gson,我正在调用一个web服务,它从数据库获取数据并输出以下JSON: {"eventId":"1","eventTitle":"opening ceremony","eventCategory":"store","eventSubCategory":"clothing","eventDescription":"This is an event description of some kid for the first event","eventDate":"13/05/2012","eventTim

我正在调用一个web服务,它从数据库获取数据并输出以下JSON:

{"eventId":"1","eventTitle":"opening ceremony","eventCategory":"store","eventSubCategory":"clothing","eventDescription":"This is an event description of some kid for the first event","eventDate":"13/05/2012","eventTime":"14:52","eventAddress":"49 somerset road","eventCity":"southsea","eventCountry":"UK","eventWebsite":"www.nxtldn.com","eventEmail":"lg@nxtldn.com","eventPhone":"07757491567","eventKeywords":"clothes, street, wear, heart, love"},{"eventId":"2","eventTitle":"cupcakes","eventCategory":"Store","eventSubCategory":"food","eventDescription":"This is an event description of some kid for the second event","eventDate":"17/05/2012","eventTime":"11:22","eventAddress":"12 cleveleys road","eventCity":"london","eventCountry":"UK","eventWebsite":"www.ashshort.com","eventEmail":"ashshort@short.com","eventPhone":"0778514562","eventKeywords":"cupcakes, store, london, hipster"}]
我附加了它(我已经测试了JSON是否有效,使用):

我使用异步任务调用它

public class EventSync extends AsyncTask<String, Integer, EventsList> {

EventsList elist1 = new EventsList();

@Override
protected EventsList doInBackground(String... urls) {
    String tempurl = urls[0];
    String output = "";
    InputStream is = null;
    StringBuilder sb = new StringBuilder();
    EventsList list = new EventsList();
    try
    {
        URL url = new URL(tempurl);
        HttpURLConnection con = (HttpURLConnection) url.openConnection();
        con.connect();
        is = con.getInputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(is));
        String line = null;

        while((line = reader.readLine()) != null)
        {
            sb.append(line + "\n");
        }

    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
    finally
    {
        try
        {
            is.close();
        }
        catch (IOException e)
        {
            e.printStackTrace();
        }
    }

    output = sb.toString();
    String json = "{\"Events\":" + output + "}";
    System.out.println(json);
    Gson gson = new Gson();
// When debugging this is the line I believe it fails on, It points to a bit of memory but the list is empty.
    EventsList jsonlist = gson.fromJson(json, EventsList.class);

    return jsonlist;
}

@Override 
protected void onPostExecute(EventsList list)
{

    System.out.println("in on post");
    for (Event event : list.getEvents())
    {
        System.out.println(event.getEventId());
    }
}}
目前,我正在尝试测试它,看看在使用自定义适配器填充listview之前它是否会返回。但不幸的是,我得到了以下错误:

11-10 23:37:08.315: E/AndroidRuntime(5592): FATAL EXCEPTION: main
11-10 23:37:08.315: E/AndroidRuntime(5592): java.lang.NullPointerException
11-10 23:37:08.315: E/AndroidRuntime(5592):     at com.nxtldn.trill.EventSync.onPostExecute(EventSync.java:71)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at com.nxtldn.trill.EventSync.onPostExecute(EventSync.java:1)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at android.os.AsyncTask.finish(AsyncTask.java:631)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at android.os.AsyncTask.access$600(AsyncTask.java:177)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at android.os.Handler.dispatchMessage(Handler.java:99)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at android.os.Looper.loop(Looper.java:137)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at android.app.ActivityThread.main(ActivityThread.java:4745)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at java.lang.reflect.Method.invokeNative(Native Method)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at java.lang.reflect.Method.invoke(Method.java:511)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
11-10 23:37:08.315: E/AndroidRuntime(5592):     at dalvik.system.NativeStart.main(Native Method)
我不熟悉安卓系统,所以我不确定是否有更好的方法,或者正确的方法是什么

我的JSON结构中是否存在GSON不接受并返回空指针的原因


非常感谢所有能够提供帮助的人:)

在EventsList中,您需要一个事件列表(集合),但您附加的JSON实际上是一个对象:“{\'events\”:“+output+”}”;也许你想让它看起来像这样:

"{\"Events\":[" + output + "]}";

这会将单个事件放入一系列潜在事件中。您的用例令人困惑,我不确定为什么要将单个JSON对象放入数组中,但我可能缺少更多的细节。

在EventsList中,您需要一个事件列表(集合),但您附加的JSON实际上是一个对象:“{\“events\”:“+output+”}”;也许你想让它看起来像这样:

"{\"Events\":[" + output + "]}";
这会将单个事件放入一系列潜在事件中。您的用例令人困惑,我不确定为什么要将单个JSON对象放入数组中,但我可能缺少更多细节。

尝试更改

EventsList jsonlist = gson.fromJson(json, EventsList.class);

这是假设您在Web服务中使用了类型为Event的数组(在您的示例中如上所示)来创建此json。我认为当前的问题是json字符串与类EventList不匹配,因此返回null。确保服务中的事件类与android项目匹配。

尝试更改

EventsList jsonlist = gson.fromJson(json, EventsList.class);


这是假设您在Web服务中使用了类型为Event的数组(在您的示例中如上所示)来创建此json。我认为当前的问题是json字符串与类EventList不匹配,因此返回null。确保服务中的事件类与android项目匹配。

我发现这是因为我在字符串生成器中添加了“/n”,创建了新行并切掉了json的最后一个}。谢谢大家

我发现这是因为我在我的字符串生成器中添加了“/n”,创建了新行并切掉了json的最后一行。谢谢大家

很抱歉,第一个JSON输出缺少一个方括号,在复制到SOF时删除了该方括号。请注意第二个JSON,它是一个事件的JSON对象,包含JSON对象的JSON数组。我说的对吗?然后我尝试使用GSON将其转换为我的两个独立类。尝试将其称为“事件”而不是“事件”。对不起,第一个JSON输出缺少一个方括号,在复制到SOF时已将其删除。请注意第二个JSON,它是一个事件的JSON对象,包含JSON对象的JSON数组。我说的对吗?然后我尝试使用GSON将其转换为两个独立的类。尝试将其称为“事件”而不是“事件”
EventsList jsonlist = gson.fromJson(json, EventsList.class);
Event[] jsonlist = gson.fromJson(json, Event[].class);