You are not accounting for null geo types which will cause an exception on the original code. Use peek()
to check for null. I've modified the code to handle this and it prints both objects.
class MyReader
{
public void readBegin(JsonReader reader)
{
try
{
reader.beginObject();
while (reader.hasNext())
{
String name = reader.nextName();
if (name.equals("results"))
{
reader.beginArray();
while (reader.hasNext())
{
read(reader);
}
reader.endArray();
}
else
{
reader.skipValue();
}
}
reader.endObject();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public void read(JsonReader reader) throws Exception
{
String from_user = null, from_user_id_str = null, from_user_name = null, text = null;
URL profile_image_url = null;
reader.beginObject();
while (reader.hasNext())
{
String name = reader.nextName();
if (name.equals("from_user"))
{
from_user = reader.nextString();
System.out.println(from_user);
}
else if (name.equals("from_user_id_str"))
{
from_user_id_str = reader.nextString();
}
else if (name.equals("from_user_name"))
{
from_user_name = reader.nextString();
}
else if (name.equals("geo"))
{
if (reader.hasNext())
{
JsonToken peek = reader.peek();
if (peek == JsonToken.NULL)
{
reader.skipValue();
}
else
{
reader.beginObject();
while (reader.hasNext())
{
// String s = reader.nextName();
if (name.equals("coordinates"))
{
reader.beginArray();
double latitude = 0;
double longitude = 0;
while (reader.hasNext())
{
latitude = reader.nextDouble();
longitude = reader.nextDouble();
}
reader.endArray();
}
else
{
reader.skipValue();
}
}
reader.endObject();
}
}
}
else if (name.equals("profile_image_url"))
{
profile_image_url = new URL(reader.nextString());
}
else if (name.equals("text"))
{
text = reader.nextString();
}
else
{
reader.skipValue();
}
}
reader.endObject();
}