Android JSON Parser
Android JSON Parser
The meaning of JSON is JavaScript Object Notation. Mainly JSON use for data-interchange. It is easy for humans to read and write. JSON data use as bridge between android and remote database. Here we are going to learn JSON parse and store data to collection framework and fetch data to ListView. We need to call network to fetch data from remote server. Here we call network under a background thread(JsonTask.java, a class that inherit AsyncTask class) from JsonParseActivity.java activity class.
So, need to take permission of network and check network connection of device.
Permission:-
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.INTERNET" />
Source Code:-
JsonParseActivity.java
package com.androidfromhome.jsonparse;
import com.androidfromhome.json.util.JsonTask;
import com.androidfromhome.json.webservice.CheckIneternetConnection;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
public class JsonParseActivity extends Activity implements OnClickListener {
private Button btn_json;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_json_parse);
btn_json=(Button)findViewById(R.id.btn_json);
btn_json.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_json:
if (CheckIneternetConnection.checkConnection(JsonParseActivity.this)) {
new JsonTask(JsonParseActivity.this, JsonParseActivity.this).execute("");
}
else{
Toast.makeText(JsonParseActivity.this, "Internet connection error", Toast.LENGTH_LONG).show();
}
break;
default:
break;
}
}
}
ListViewActivity.java
package com.androidfromhome.jsonparse;
import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;
import com.androidfromhome.json.util.ListCollection;
import com.androidfromhome.json.util.adapter.AndroidListAdapter;
public class ListViewActivity extends Activity {
private ListView lv_android;
private AndroidListAdapter list_adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list_view);
getWidget();
}
public void getWidget(){
lv_android = (ListView) findViewById(R.id.lv_android);
list_adapter=new AndroidListAdapter(ListViewActivity.this,R.layout.list_item, ListCollection.listCollectionArr);
lv_android.setAdapter(list_adapter);
}
}
PostingJson .java
package com.androidfromhome.json.webservice;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
public class PostingJson {
public static String postJson(ArrayList<NameValuePair> entity,String url) {
String RESPONSE = "";
HttpClient httpClient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try{
httppost.setHeader("Content-Type","application/x-www-form-urlencoded");
httppost.setEntity(new UrlEncodedFormEntity(entity, "UTF-8"));
HttpResponse response = httpClient.execute(httppost);
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
RESPONSE = reader.readLine();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return RESPONSE;
}
}
JsonParser.java
package com.androidfromhome.json.webservice;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import com.androidfromhome.json.util.ListCollection;
public class JsonParser {
public static void getJsonData(String data) throws JSONException{
ListCollection.listCollectionArr.clear();
JSONArray main_arr=new JSONArray(data);
if (main_arr!=null) {
int len=main_arr.length();
for (int i = 0; i <len; i++) {
JSONObject json_obj=main_arr.getJSONObject(i);
if (json_obj!=null) {
String id="";
String username="";
String address="";
String phoneno="";
if (json_obj.has("id")) {
id=json_obj.getString("id");
}
if (json_obj.has("username")) {
username=json_obj.getString("username");
}
if (json_obj.has("address")) {
address=json_obj.getString("address");
}
if (json_obj.has("phoneno")) {
phoneno=json_obj.getString("phoneno");
}
ListCollection.listCollectionArr.add(new ListCollection( id, username, address, phoneno));
}
}
}}
}
CheckIneternetConnection.java
package com.androidfromhome.json.webservice;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
public class CheckIneternetConnection {
@SuppressWarnings("deprecation")
public static boolean checkConnection(Context context)
{
ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
TelephonyManager telManager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
NetworkInfo info = connManager.getActiveNetworkInfo();
if (info == null ||!connManager.getBackgroundDataSetting())
{
return false;
}
int netType = info.getType();
int netSubtype = info.getSubtype();
if (netType == ConnectivityManager.TYPE_WIFI || netType == ConnectivityManager.TYPE_MOBILE)
{
return info.isConnected();
} else if (netType == ConnectivityManager.TYPE_MOBILE && netSubtype == TelephonyManager.NETWORK_TYPE_UMTS && !telManager.isNetworkRoaming())
{
return info.isConnected();
} else
{
return false;
}
}
}
AndroidListAdapter.java
package com.androidfromhome.json.util.adapter;
import java.util.ArrayList;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import com.androidfromhome.json.util.ListCollection;
import com.androidfromhome.jsonparse.R;
public class AndroidListAdapter extends ArrayAdapter<ListCollection>{
private final Context context;
private final ArrayList<ListCollection> values;
private ViewHolder viewHolder;
private final int resourceId;
public AndroidListAdapter(Context context, int resourceId,ArrayList<ListCollection> values) {
super(context, resourceId, values);
// TODO Auto-generated constructor stub
this.context = context;
this.values = values;
this.resourceId = resourceId;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(resourceId, parent, false);
viewHolder = new ViewHolder();
viewHolder.tv_user = (TextView) convertView.findViewById(R.id.tv_user);
viewHolder.tv_address = (TextView) convertView.findViewById(R.id.tv_address);
viewHolder.tv_phone = (TextView) convertView.findViewById(R.id.tv_phone);
convertView.setTag(viewHolder);
}else
{
viewHolder = (ViewHolder) convertView.getTag();
}
ListCollection list_obj=values.get(position);
viewHolder.tv_user.setText(list_obj.username);
viewHolder.tv_address.setText(list_obj.address);
viewHolder.tv_phone.setText(list_obj.phoneno);
return convertView;
}
public class ViewHolder {
TextView tv_user;
TextView tv_address;
TextView tv_phone;
}
}
ListCollection.java
package com.androidfromhome.json.util;
import java.util.ArrayList;
public class ListCollection {
public static ArrayList<ListCollection> listCollectionArr=null;
public String id="";
public String username="";
public String address="";
public String phoneno="";
public ListCollection(String id,String username,String address,String phoneno){
this.id=id;
this.username=username;
this.address=address;
this.phoneno=phoneno;
}
}
JsonTask.java
package com.androidfromhome.json.util;
import java.util.ArrayList;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import com.androidfromhome.json.webservice.JsonParser;
import com.androidfromhome.json.webservice.PostingJson;
import com.androidfromhome.jsonparse.ListViewActivity;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.os.AsyncTask;
public class JsonTask extends AsyncTask<String, Void, String> {
String response="";
Context ctx;
Activity act;
private ProgressDialog progDailog;
public JsonTask(Context ctx,Activity act){
ListCollection.listCollectionArr=new ArrayList<ListCollection>();
this.act=act;
this.ctx=ctx;
progDailog=new ProgressDialog(ctx);
}
protected void onPreExecute() {
progDailog.setCancelable(false);
progDailog.setMessage("Please Wait...");
progDailog.show();
}
@Override
protected String doInBackground(String... arg0) {
try {
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("user_details_woimg","dfdf"));
String url="http://androidfromhome.com/json/functions.php?";
response=PostingJson.postJson(nameValuePairs,url);
}catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
if (response!=null) {
if (!response.equalsIgnoreCase("")&&!response.equalsIgnoreCase("null")) {
try {
JsonParser.getJsonData(response);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return response;
}
@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
progDailog.dismiss();
ctx.startActivity(new Intent(ctx,ListViewActivity.class));
}
}