I am having trouble parsing my JSON API -
[
{
"Id":1,
"FirstName":"admin",
"LastName":"admin",
"Mobile":null,
"Email":"rajaish.rolen@gmail.com",
"UserName":"admin",
"password":"admin",
"RoleID":0,
"CreationDate":"2013-11-15T00:00:00",
"ModificationDate":"2013-11-15T00:00:00"
}
]
I've read some tutorials online, with a JSONParser class in which there is a getJSONFromURL
method which returns JSONObject. But in all these tutorials their API starts from a JSON Object {
, whereas mine starts from an array [. What changes do I need to make so that I can parse this api? Any other way of doing it? Please help me out, its been a head-scratcher for 3 days.
Here is my JSONParser class -
package com.example.projectfortab;
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);
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");
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;
}
}
and here is what I am doing to parse it -
private static final String url = (Some url);
private static final String TAG_ID = "CreationDate";
private static final String TAG_FIRSTNAME = "password";
private static final String TAG_LASTNAME = "LastName";
String id;
JSONArray user = null; here
private class JSONParse extends AsyncTask<String, String, JSONArray> {
private ProgressDialog pDialog;
@Override
protected JSONArray doInBackground(String... params) {
JSONParser jParser = new JSONParser();
JSONArray json = jParser.getJSONFromUrl(url);
System.out.println("LENGTH" + json.length());
try {
JSONObject json1 = json.getJSONObject(0);
if(json1.has(TAG_ID))
id = json1.getString(TAG_ID);
else
System.out.println("NO SUCH KEY");
} catch (JSONException e) {
e.printStackTrace();
}
Log.d("anush", "ID From JSON : " + id);
return json;
}
when I tried this, logcat showing -
11-19 12:39:44.812: E/JSON Parser(29746): Error parsing data org.json.JSONException: Value {"ExceptionType":"System.NullReferenceException","Message":"An error has occurred.","StackTrace":" at Lifestyle.Models.UserLoginRepository.Save(UserLogin item) in D:\\project\\LifestyleSolution2\\LifestyleSolution\\LifestyleSolution\\Lifestyle\\Models\\Repository\\UserLoginRepository.cs:line 83\r\n at Lifestyle.Controllers.UserController.Post(UserLogin user) in D:\\project\\LifestyleSolution2\\LifestyleSolution\\LifestyleSolution\\Lifestyle\\Controllers\\UserController.cs:line 51","ExceptionMessage":"Object reference not set to an instance of an object."} of type org.json.JSONObject cannot be converted to JSONArray
and
11-19 12:39:44.842: E/AndroidRuntime(29746): FATAL EXCEPTION: AsyncTask #1
11-19 12:39:44.842: E/AndroidRuntime(29746): java.lang.RuntimeException: An error occured while executing doInBackground()
11-19 12:39:44.842: E/AndroidRuntime(29746): at android.os.AsyncTask$3.done(AsyncTask.java:299)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:352)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.setException(FutureTask.java:219)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.run(FutureTask.java:239)
11-19 12:39:44.842: E/AndroidRuntime(29746): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.lang.Thread.run(Thread.java:856)
11-19 12:39:44.842: E/AndroidRuntime(29746): Caused by: java.lang.NullPointerException
11-19 12:39:44.842: E/AndroidRuntime(29746): at com.example.projectfortab.FirstActivity$JSONParse.doInBackground(FirstActivity.java:260)
11-19 12:39:44.842: E/AndroidRuntime(29746): at com.example.projectfortab.FirstActivity$JSONParse.doInBackground(FirstActivity.java:1)
11-19 12:39:44.842: E/AndroidRuntime(29746): at android.os.AsyncTask$2.call(AsyncTask.java:287)
11-19 12:39:44.842: E/AndroidRuntime(29746): at java.util.concurrent.FutureTask.run(FutureTask.java:234)
11-19 12:39:44.842: E/AndroidRuntime(29746): ... 4 more