T_O T_O - 1 year ago 112
Android Question

Convert JSONArray to Object using GSON fromJson method (Solved)

I have a

WCF
Webservice
, in which send a data model and i get this in
Android
by
JSon
(By Entity Framework),any ways,
I can successfully get that
JSON
by this code and store all
JSON
Objects in
JSONArray
in the
AsyncTas
class, and in :

public class Consume extends AsyncTask<Void, Void, Void> {

InputStream inputStream = null;
String result = "";
private ArrayList<Contact> contacts = new ArrayList<Contact>();

@Override
protected Void doInBackground(Void... params) {
String URL = "http://x.x.x.x/MyWCF/Service1.svc/rest/getContact";
ArrayList<NameValuePair> param = new ArrayList<NameValuePair>();
try {
HttpClient httpClient = new DefaultHttpClient();
HttpPost post = new HttpPost(URL);
post.setEntity(new UrlEncodedFormEntity(param));
HttpResponse httpResponse = httpClient.execute(post);
HttpEntity httpEntity = httpResponse.getEntity();
//post.setHeader("content-type", "application/json");
inputStream = httpEntity.getContent();

} catch (UnsupportedEncodingException e1) {
Log.e("UnsupportedEncoding", e1.toString());
e1.printStackTrace();
} catch (ClientProtocolException e2) {
Log.e("ClientProtocolException", e2.toString());
e2.printStackTrace();
} catch (IllegalStateException e3) {
Log.e("IllegalStateException", e3.toString());
e3.printStackTrace();
} catch (IOException e4) {
Log.e("IOException", e4.toString());
e4.printStackTrace();
}
try {
BufferedReader bReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8);

StringBuilder sBuilder = new StringBuilder();

String line = null;
while ((line = bReader.readLine()) != null) {
sBuilder.append(line + "\n");
}
inputStream.close();
result = sBuilder.toString();
} catch (Exception e) {
Log.e("StringBuilding", "Error converting result " + e.toString());
}
return null;
}

@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
try {
JSONObject object = new JSONObject(result);
JSONArray jArray = object.getJSONArray("getContactResult"); //here i create the JsonArray of all JsonObjects

//Here is the solutions, We make a list of out Contact and make it as down

List<Contact> contacts;
Type listType = new TypeToken<List<Contact>>() {
}.getType();
contacts= new Gson().fromJson(String.valueOf(jArray), listType);

//And here solution is ended !

} catch (JSONException e) {
e.printStackTrace();
}
}


And i created a Contact
class
in
android
, by this code :

public class Contact {


@SerializedName("name")
private String name;

@SerializedName("lastName")
private String lastName;

@SerializedName("phoneNumber")
private String phoneNumber;

@SerializedName("latitude")
private String latitude;

@SerializedName("longitude")
private String longitude;

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public String getLastName() {
return lastName;
}

public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}

public String getPhoneNumber() {
return phoneNumber;
}

public void setLatitude(String latitude) {
this.latitude = latitude;
}

public String getLatitude() {
return latitude;
}

public void setLongitude(String longitude) {
this.longitude = longitude;
}

public String getLongitude() {
return longitude;
}
}


And i parse this
JSONArray
by Old ways !
By this method :

ArrayList<Contact> setFields(JSONArray jsonArray) {
ArrayList<Contact> contacts = new ArrayList<Contact>();
for(int i=0; i<jsonArray.length(); i++) {
try {
Contact contact = new Contact();
JSONObject object = (JSONObject) jsonArray.get(i);
contact.setName(object.getString("name"));
contact.setLastName(object.getString("lastName"));
contact.setPhoneNumber(object.getString("phoneNumber"));
contact.setLatitude(object.getString("latitude"));
contact.setLongitude(object.getString("longitude"));
contacts.add(contact);
} catch (JSONException e) {
e.printStackTrace();
}
}
return contacts;
}


It works, but I do not want to handle and parse
JSONArray
by this old way and wanna use
GSON
instead,any one can help me with this sample?
Here is my
JSONArray
and
JSON
Object :

{
"getContactResult": [
{
"id": 2041,
"lastName": "xxxx",
"latitude": xxx,
"longitude": xxx,
"name": "xxxx",
"phoneNumber": "xxxx"
}
]
}


Thx

Answer Source
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;

List<Contact> contacts;    
Type listType = new TypeToken<List<Contact>>() {
                    }.getType();
 contacts= new Gson().fromJson(jsonArray, listType);

This should work. make sure that your model class has same name as of json parameters and datatype. it will parse the jsonarray to type List of java

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download