I am trying to display the elements in listview from the JSON::
JsonURL- https://dl.dropboxusercontent.com/s/rhk01nqlyj5gixl/jsonparsing.txt?token_hash=AAHpfauVxJaC9Rkx_5abNtJnPFG04os7TZky1AhOuC5jEw
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ListView
android:id="@+id/listViewID"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_gravity="center">
</ListView>
</LinearLayout>
JSONParser.java
package com.example.testjson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.util.Log;
public class JSONParser {
static InputStream is = null;
static JSONArray jObj = null;
static String json = "";
// constructor
public JSONParser() {
}
public JSONArray getJSONFromUrl(String url) {
// Making HTTP request
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
is = httpEntity.getContent();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "iso-8859-1"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line + "\n");
}
is.close();
json = sb.toString();
} catch (Exception e) {
Log.e("Buffer Error", "Error converting result " + e.toString());
}
// try parse the string to a JSON object
try {
jObj = new JSONArray(json);
} catch (JSONException e) {
Log.e("JSON Parser", "Error parsing data " + e.toString());
}
// return JSON String
return jObj;
}
}
row.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/relativelay"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/tvname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginLeft="5dip"
android:maxLines="1"
android:text="Name"
android:textColor="@android:color/black"
android:textSize="14dp"
android:textStyle="bold" >
</TextView>
<TextView
android:id="@+id/tvcity"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvname"
android:layout_marginLeft="5dip"
android:layout_marginTop="3dip"
android:maxLines="1"
android:text="City"
android:textColor="@android:color/black"
android:textSize="14dp" >
</TextView>
<TextView
android:id="@+id/tvbdate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvcity"
android:layout_marginLeft="5dip"
android:layout_marginTop="3dip"
android:maxLines="1"
android:text="Birthdate"
android:textColor="@android:color/black"
android:textSize="14dp" >
</TextView>
<TextView
android:id="@+id/tvgender"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_marginRight="15dip"
android:maxLines="1"
android:text="Gender"
android:textColor="@android:color/black"
android:textSize="14dp"
android:textStyle="bold" >
</TextView>
<TextView
android:id="@+id/tvage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_below="@+id/tvgender"
android:layout_marginRight="15dip"
android:layout_marginTop="3dip"
android:maxLines="1"
android:text="Age"
android:textColor="@android:color/black"
android:textSize="14dp" >
</TextView>
</RelativeLayout>
MainActivity.java
package com.example.testjson;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.os.Bundle;
import android.app.Activity;
import android.text.StaticLayout;
import android.view.Menu;
public class MainActivity extends Activity {
private static String url="https://www.dropbox.com/s/rhk01nqlyj5gixl/jsonparsing.txt?dl=1";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//Create a JSON parser Instance ----- Used JSON parser from Android
JSONParser jParser=new JSONParser();
//Getting JSON string from URL ------ Used JSON Array from Android
JSONArray json=jParser.getJSONFromUrl(url);
try {
for(int i=0;i<json.length();i++)
{
JSONObject c=json.getJSONObject(i);// Used JSON Object from Android
//Storing each Json in a string variable
int AGE=c.getInt("age");
String NAME=c.getString("name");
String CITY=c.getString("city");
String GENDER=c.getString("Gender");
String BIRTHDATE=c.getString("birthdate");
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
- I am trying to populate the data from the JSON to listView, some
ambiguity on filling
MainActivity.java
- what collection to use for this functionality ?
- Any ideas, This looks a simple task but for a beginner like me its giving a lot of fight to learn
Thanks ,
Use of ArrayList will be better for you.See the following snippet,
Declare the following on the top,
And the following inside the try block after fetching the
Name
And you can easily fetch the values from the arraylist through the index value like follows,
Create a class, say Student, to contain a record, create an array of Student from the JSON, and then use that with ArrayAdapter to populate your ListView.
I would use GSON library for its simplicity. In this case you will have the following:
A POJO student class for data mapping
To parse the data just do
And from here you just add the data to the adapter, and that's it.
Continuing your class:
adater:
object holding data:
xml for listview item (save under
itemlistrow
name):Reused elements from https://stackoverflow.com/a/8166802/1276374
Simpler example:
Thanks to http://www.javacodegeeks.com/2013/06/android-listview-tutorial-and-basic-example.html