Android JSON Parsing Tutorial
Android JSON Parsing Tutorial
BEGINNER
Following is the sample JSON that we are going to parse in this tutorial. This is very simple
JSON which gives us list of contacts where each node contains contact information like
name, email, address, gender and phone numbers.
{
"contacts": [
{
"id": "c200",
"name": "Ravi Tamada",
"email": "[email protected]",
"address": "xx-xx-xxxx,x - street, x - country",
"gender" : "male",
"phone": {
"mobile": "+91 0000000000",
"home": "00 000000",
"office": "00 000000"
}
},
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 1/16
11/1/2018 Android JSON Parsing Tutorial
{
"id": "c201",
"name": "Johnny Depp",
"email": "[email protected]",
"address": "xx-xx-xxxx,x - street, x - country",
"gender" : "male",
"phone": {
"mobile": "+91 0000000000",
"home": "00 000000",
"office": "00 000000"
}
},
.
.
.
.
]
}
In general all the JSON nodes will start with a square bracket or with a curly bracket. The
di erence between [ and { is, the square bracket ([) represents starting of an JSONArray
node whereas curly bracket ({) represents JSONObject. So while accessing these nodes
we need to call appropriate method to access the data.
If your JSON node starts with [, then we should use getJSONArray() method. Same as if
the node starts with {, then we should use getJSONObject() method.
So let’s start by creating a new android project. We’ll build a simple app which fetches the
json from url, parses it and displays the contacts in a list view. Here we’ll use import
java.net libraries (which are natively supported in android) to make the http call and fetch
the json from url.
1. Create a new project in Android Studio from File ⇒ New Project and ll out the
required details.
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 2/16
11/1/2018 Android JSON Parsing Tutorial
2. As we are fetching the JSON by making HTTP calls, we need to add INTERNET
permission in AndroidManifest.xml le. Open AndroidManifest.xml and add the
following permission.
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="info.androidhive.jsonparsing" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme" >
<activity android:name=".MainActivity" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCH
</intent-filter>
</activity>
</application>
</manifest>
3. Create a class named HttpHandler.java and use the below code. Here
makeServiceCall() makes http call to particular url and fetches the response. In our case,
we use this to get the raw json from the url.
HttpHandler.java
package info.androidhive.jsonparsing;
import android.util.Log;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
/**
* Created by Ravi Tamada on 01/09/16.
* www.androidhive.info
*/
public class HttpHandler {
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 3/16
11/1/2018 Android JSON Parsing Tutorial
public HttpHandler() {
}
String line;
try {
while ((line = reader.readLine()) != null) {
sb.append(line).append('\n');
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return sb.toString();
}
}
4. Before making the http call, let’s add a list view rst in our view. Open the layout le of
main activity (activity_main.xml) and add a ListView element.
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/andr
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="info.androidhive.jsonparsing.MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</RelativeLayout>
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 4/16
11/1/2018 Android JSON Parsing Tutorial
5. Create another layout le named list_item.xml with following content. This will be used
to render single list item view.
list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/androi
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="@dimen/activity_horizontal_margin">
<TextView
android:id="@+id/name"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:paddingTop="6dip"
android:textColor="@color/colorPrimaryDark"
android:textSize="16sp"
android:textStyle="bold" />
<TextView
android:id="@+id/email"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingBottom="2dip"
android:textColor="@color/colorAccent" />
<TextView
android:id="@+id/mobile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#5d5d5d"
android:textStyle="bold" />
</LinearLayout>
6. Open MainActivity.java and declare the necessary variables for the list view. If you
haven’t worked with list view yet, Android ListView Tutorial will helps you in getting
started.
MainActivity.java
public class MainActivity extends AppCompatActivity {
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 5/16
11/1/2018 Android JSON Parsing Tutorial
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.list);
}
}
7. As we are getting the JSON by making HTTP call, I am adding a Async class GetContacts
to make http calls on background thread. Add the following method in your main activity
class.
In onPreExecute() method progress dialog is shown before making the http call.
In doInBackground() method, makeServiceCall() is called to get the json from url. Once
the json is fetched, it is parsed and each contact is added to array list.
In onPostExecute() method the progress dialog is dismissed and the array list data is
displayed in list view using an adapter.
Also note that I have used getJSONArray() or getJSONObject() method depending on the
type of node.
MainActivity.java
package info.androidhive.jsonparsing;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.HashMap;
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 6/16
11/1/2018 Android JSON Parsing Tutorial
private String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lv = (ListView) findViewById(R.id.list);
new GetContacts().execute();
}
/**
* Async task class to get json by making HTTP call
*/
private class GetContacts extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
// Showing progress dialog
pDialog = new ProgressDialog(MainActivity.this);
pDialog.setMessage("Please wait...");
pDialog.setCancelable(false);
pDialog.show();
@Override
protected Void doInBackground(Void... arg0) {
HttpHandler sh = new HttpHandler();
if (jsonStr != null) {
try {
JSONObject jsonObj = new JSONObject(jsonStr);
String id = c.getString("id");
String name = c.getString("name");
String email = c.getString("email");
String address = c.getString("address");
String gender = c.getString("gender");
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 7/16
11/1/2018 Android JSON Parsing Tutorial
String mobile = phone.getString("mobile");
String home = phone.getString("home");
String office = phone.getString("office");
}
} else {
Log.e(TAG, "Couldn't get json from server.");
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(),
"Couldn't get json from server. Check
Toast.LENGTH_LONG)
.show();
}
});
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
// Dismiss the progress dialog
if (pDialog.isShowing())
pDialog.dismiss();
/**
* Updating parsed JSON data into ListView
* */
ListAdapter adapter = new SimpleAdapter(
MainActivity.this, contactList,
R.layout.list_item, new String[]{"name", "email",
"mobile"}, new int[]{R.id.name,
R.id.email, R.id.mobile});
lv.setAdapter(adapter);
}
}
}
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 8/16
11/1/2018 Android JSON Parsing Tutorial
If you run the project, you can see json data populated into list view as shown in the
below image.
The above method is very easy for simpler json. If the json is very complex, it is better to
consider the third party libraries as they are much faster and reliable. Below are the
popular libraries used to parse the json.
Volley HTTP library provides easy way to make networks calls. In Android JSON parsing
using Volley you can learn how to do that same in easy way using volley networking library
which provides you lot of advantages like success/error callback methods and cache
options.
Retro t is much popular than volley. The parsing is done using jackson libraries in which
you just have to create models for json nodes and the library automatically converts the
json into appropriate objects. Go through Android Working with Retro t HTTP Library
which explains in detail about retro t library.
Change Log
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 9/16
11/1/2018 Android JSON Parsing Tutorial
Ravi Tamada
Ravi is hardcore Android programmer and Android programming
has been his passion since he compiled his rst hello-world
program. Solving real problems of Android developers through
tutorials has always been interesting part for him.
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 10/16
11/1/2018 Android JSON Parsing Tutorial
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 11/16
11/1/2018 Android JSON Parsing Tutorial
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 12/16
11/1/2018 Android JSON Parsing Tutorial
V O L L EY
RELATED POSTS
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 13/16
11/1/2018 Android JSON Parsing Tutorial
Sort by Newest
Recommend 130 ⤤ Share
LOG IN WITH
OR SIGN UP WITH DISQUS ?
Name
That was good tutorial. However there was an error in my Android Studio 3.0.1:
When I extended AsyncTask in MainActivity.java as you told, I get this error: Error:(48,
45) error: illegal start of type.
Help me to fix it.
△ ▽ • Reply • Share ›
Just write on click listener for your list view and pass the contact via intent to
another activity.
△ ▽ • Reply • Share ›
lv.setAdapter(adapter);
lv.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView adapterView, View view, int i, long l) {
Intent cropcategoryIntent = new Intent(MainActivity.this, CropnameActivity.class);
see more
△ ▽ • Reply • Share ›
Hi Deependra
1. First of all use RecyclerView to display the information in list. Don't use the
ListView. This article can help in displaying json data in list (ignore search
part).
https://www.androidhive.inf...
2. Second you need to find the item that is clicked. You can attach a click
listener to RecyclerView and find the item index selected. Once index is
known, you can get the item details from the ArrayList.
https://www.androidhive.inf... You can learn RecyclerView and Click listener
here.
https://www.androidhive.info/2012/01/android-json-parsing-tutorial/ 15/16
11/1/2018 Android JSON Parsing Tutorial
3. Pass the selected item id or name (whatever parameter is required to get
complete json of a single item). You can pass the data to another activity via
intents.
https://www.androidhive.inf... This article explains how to send data b/w
activities via intents.
4. On the full details activity, get the item id sent from list activity and fetch the
json by making http call again.
△ ▽ • Reply • Share ›
Are you trying the below url? The json is loading properly.
https://api.androidhive.inf...
If you are trying any other url, it is not responding with json. Instead it has
some errors.
△ ▽ • Reply • Share ›
Are you trying the the url with https, not http?
△ ▽ • Reply • Share ›
Okay
△ ▽ • Reply • Share ›