I am taking an example of following JSON which will give you list of contacts and each contact will have details like name, email, address, phone number ertc,.
If you observe normally JSON data will have square brackets and curly brackets. The difference between [ and { is, the square bracket represents starting of an JSONArray node whereas curly bracket represents JSONObject. While accessing these elements we need to call different methods to access these nodes.
In your project create a class file and name it as JSONParser.java. The parser class has a method which will make http request to get JSON data and returns a JSONObject.
JSONParser.java :
If you observe normally JSON data will have square brackets and curly brackets. The difference between [ and { is, the square bracket represents starting of an JSONArray node whereas curly bracket represents JSONObject. While accessing these elements we need to call different methods to access these nodes.
- Writing JSON Parser Class
In your project create a class file and name it as JSONParser.java. The parser class has a method which will make http request to get JSON data and returns a JSONObject.
JSONParser.java :
package
com.androidhive.jsonparsing;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.JSONException;import
org.json.JSONObject;import
android.util.Log;public
class JSONParser
{ static InputStream is = null; static JSONObject jObj = null; static String json = ""; //
constructor public JSONParser() { } public JSONObject 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 JSONObject(json); } catch (JSONException e)
{ Log.e("JSON
Parser", "Error
parsing data " + e.toString()); } // return JSON
String return
jObj; }}
- Parsing JSON Data
Once you created parser class next thing is to know how to use that class.
Below i am explaining how to parse the json (taken in this example) using the
parser class.
1. In the contacts json we have items like
name, email, address, gender and phone numbers. So first thing is to store all
these node names in variables. Open your main activity class and declare store
all node names in static variables.
// url to make
request
// JSON Node
names
private
static final
String TAG_CONTACTS = "contacts";
private
static final
String TAG_ID = "id";
private
static final
String TAG_NAME = "name";
private
static final
String TAG_EMAIL = "email";
private
static final
String TAG_ADDRESS = "address";
private
static final
String TAG_GENDER = "gender";
private static
final String
TAG_PHONE = "phone";
private static
final String
TAG_PHONE_MOBILE = "mobile";
private static
final String
TAG_PHONE_HOME = "home";
private static
final String
TAG_PHONE_OFFICE = "office";
// contacts
JSONArray
JSONArray
contacts = null;
2. Next step to is to use parser class to get JSONObject and
looping through each json item. Below i am creating an instance of JSONParser
class and using for loop i am looping through each json item and finally storing
each json data in variable.
// Creating
JSON Parser instance
JSONParser
jParser = new JSONParser();
// getting
JSON string from URL
JSONObject json =
jParser.getJSONFromUrl(url);
try
{
// Getting Array of Contacts
contacts = json.getJSONArray(TAG_CONTACTS);
// looping through
All Contacts
for(int i = 0; i < contacts.length(); i++){
JSONObject c =
contacts.getJSONObject(i);
// Storing each
json item in variable
String id =
c.getString(TAG_ID);
String name =
c.getString(TAG_NAME);
String email =
c.getString(TAG_EMAIL);
String address =
c.getString(TAG_ADDRESS);
String gender =
c.getString(TAG_GENDER);
// Phone number
is agin JSON Object
JSONObject phone =
c.getJSONObject(TAG_PHONE);
String mobile =
phone.getString(TAG_PHONE_MOBILE);
String home =
phone.getString(TAG_PHONE_HOME);
String office =
phone.getString(TAG_PHONE_OFFICE);
}
} catch (JSONException e)
{
e.printStackTrace();
}
- Parsing JSON data and updating into ListView
Below i am implementing same listview but the list data i am updating is from
parsed JSON.
AndroidJSONParsing.java
package
com.androidhive.jsonparsing;
import
java.util.ArrayList;
import
java.util.HashMap;
import
org.json.JSONArray;
import
org.json.JSONException;
import
org.json.JSONObject;
import
android.app.ListActivity;
import
android.content.Intent;
import
android.os.Bundle;
import
android.util.Log;
import
android.view.View;
import
android.widget.AdapterView;
import
android.widget.AdapterView.OnItemClickListener;
import
android.widget.ListAdapter;
import
android.widget.ListView;
import
android.widget.SimpleAdapter;
import
android.widget.TextView;
public
class AndroidJSONParsing extends ListActivity
{
// url to make
request
// JSON Node
names
private static final String TAG_CONTACTS = "contacts";
private static final String TAG_ID = "id";
private static final String TAG_NAME = "name";
private static final String TAG_EMAIL = "email";
private static final String TAG_ADDRESS = "address";
private static final String TAG_GENDER = "gender";
private static final String TAG_PHONE = "phone";
private static final String TAG_PHONE_MOBILE = "mobile";
private static final String TAG_PHONE_HOME = "home";
private static final String TAG_PHONE_OFFICE = "office";
// contacts
JSONArray
JSONArray contacts =
null;
@Override
public void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// Hashmap for
ListView
ArrayList<HashMap<String, String>> contactList =
new ArrayList<HashMap<String,
String>>();
// Creating JSON
Parser instance
JSONParser jParser =
new JSONParser();
// getting JSON
string from URL
JSONObject json =
jParser.getJSONFromUrl(url);
try {
// Getting
Array of Contacts
contacts =
json.getJSONArray(TAG_CONTACTS);
// looping
through All Contacts
for(int i = 0; i < contacts.length();
i++){
JSONObject c
= contacts.getJSONObject(i);
//
Storing each json item in variable
String id =
c.getString(TAG_ID);
String name
= c.getString(TAG_NAME);
String email
= c.getString(TAG_EMAIL);
String
address = c.getString(TAG_ADDRESS);
String
gender = c.getString(TAG_GENDER);
// Phone
number is agin JSON Object
JSONObject
phone = c.getJSONObject(TAG_PHONE);
String
mobile = phone.getString(TAG_PHONE_MOBILE);
String home
= phone.getString(TAG_PHONE_HOME);
String
office = phone.getString(TAG_PHONE_OFFICE);
//
creating new HashMap
HashMap<String, String> map = new HashMap<String,
String>();
// adding
each child node to HashMap key => value
map.put(TAG_ID, id);
map.put(TAG_NAME, name);
map.put(TAG_EMAIL, email);
map.put(TAG_PHONE_MOBILE, mobile);
// adding
HashList to ArrayList
contactList.add(map);
}
} catch (JSONException e)
{
e.printStackTrace();
}
/**
* Updating
parsed JSON data into ListView
*
*/
ListAdapter adapter
= new SimpleAdapter(this,
contactList,
R.layout.list_item,
new
String[] { TAG_NAME, TAG_EMAIL, TAG_PHONE_MOBILE },
new int[] {
R.id.name, R.id.email, R.id.mobile });
setListAdapter(adapter);
// selecting
single ListView item
ListView lv =
getListView();
// Launching new
screen on Selecting Single ListItem
lv.setOnItemClickListener(new OnItemClickListener()
{
@Override
public
void onItemClick(AdapterView<?> parent, View
view,
int position, long id) {
//
getting values from selected ListItem
String name
= ((TextView) view.findViewById(R.id.name)).getText().toString();
String cost
= ((TextView) view.findViewById(R.id.email)).getText().toString();
String
description = ((TextView)
view.findViewById(R.id.mobile)).getText().toString();
//
Starting new intent
Intent in =
new Intent(getApplicationContext(),
SingleMenuItemActivity.class);
in.putExtra(TAG_NAME, name);
in.putExtra(TAG_EMAIL, cost);
in.putExtra(TAG_PHONE_MOBILE, description);
startActivity(in);
}
});
}
}
0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.