0

I have a browser and a android key for Google+ public API. Both work perfectly in browser (Chrome), but I get this error when I use inside the app:

    01-23 21:31:56.348    2645-2657/com.example.javier.NavigationDrawerAllVersions W/art﹕ Suspending all threads took: 9.048ms
01-23 21:31:56.351    2645-2657/com.example.javier.NavigationDrawerAllVersions I/art﹕ Background partial concurrent mark sweep GC freed 3019(153KB) AllocSpace objects, 0(0B) LOS objects, 29% free, 9MB/13MB, paused 32.687ms total 37.855ms
01-23 21:31:56.368    2645-2663/com.example.javier.NavigationDrawerAllVersions D/OpenGLRenderer﹕ Render dirty regions requested: true
01-23 21:31:56.368    2645-2645/com.example.javier.NavigationDrawerAllVersions D/﹕ HostConnection::get() New Host Connection established 0xa6c473c0, tid 2645
01-23 21:31:56.488    2645-2645/com.example.javier.NavigationDrawerAllVersions D/Atlas﹕ Validating map...
01-23 21:31:56.537    2645-2663/com.example.javier.NavigationDrawerAllVersions D/﹕ HostConnection::get() New Host Connection established 0xa6c47e00, tid 2663
01-23 21:31:56.586    2645-2663/com.example.javier.NavigationDrawerAllVersions I/OpenGLRenderer﹕ Initialized EGL, version 1.4
01-23 21:31:56.594    2645-2661/com.example.javier.NavigationDrawerAllVersions E/JsonParser.java﹕ Error parsing data org.json.JSONException: Value Not of type java.lang.String cannot be converted to JSONObject
01-23 21:31:56.594    2645-2661/com.example.javier.NavigationDrawerAllVersions E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.example.javier.NavigationDrawerAllVersions, PID: 2645
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference
            at com.example.javier.NavigationDrawerAllVersions.MainActivity$AsyncTaskParseJson.doInBackground(MainActivity.java:134)
            at com.example.javier.NavigationDrawerAllVersions.MainActivity$AsyncTaskParseJson.doInBackground(MainActivity.java:114)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
01-23 21:31:56.612    2645-2663/com.example.javier.NavigationDrawerAllVersions D/OpenGLRenderer﹕ Enabling debug mode 0
01-23 21:31:56.620    2645-2663/com.example.javier.NavigationDrawerAllVersions W/EGL_emulation﹕ eglSurfaceAttrib not implemented
01-23 21:31:56.621    2645-2663/com.example.javier.NavigationDrawerAllVersions W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6c9da80, error=EGL_SUCCESS
01-23 21:37:19.786    2702-2702/com.example.javier.NavigationDrawerAllVersions E/libprocessgroup﹕ failed to make and chown /acct/uid_10058: Read-only file system
01-23 21:37:19.786    2702-2702/com.example.javier.NavigationDrawerAllVersions W/Zygote﹕ createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT?
01-23 21:37:19.786    2702-2702/com.example.javier.NavigationDrawerAllVersions I/art﹕ Not late-enabling -Xcheck:jni (already on)
01-23 21:37:19.974    2702-2714/com.example.javier.NavigationDrawerAllVersions I/art﹕ Background sticky concurrent mark sweep GC freed 124(5KB) AllocSpace objects, 0(0B) LOS objects, 0% free, 2MB/2MB, paused 11.319ms total 24.560ms
01-23 21:37:20.055    2702-2714/com.example.javier.NavigationDrawerAllVersions I/art﹕ Background partial concurrent mark sweep GC freed 188(29KB) AllocSpace objects, 0(0B) LOS objects, 30% free, 9MB/13MB, paused 11.827ms total 27.957ms
01-23 21:37:20.106    2702-2719/com.example.javier.NavigationDrawerAllVersions D/OpenGLRenderer﹕ Render dirty regions requested: true
01-23 21:37:20.108    2702-2702/com.example.javier.NavigationDrawerAllVersions D/﹕ HostConnection::get() New Host Connection established 0xa68493c0, tid 2702
01-23 21:37:20.144    2702-2702/com.example.javier.NavigationDrawerAllVersions D/Atlas﹕ Validating map...
01-23 21:37:20.175    2702-2719/com.example.javier.NavigationDrawerAllVersions D/﹕ HostConnection::get() New Host Connection established 0xa6849730, tid 2719
01-23 21:37:20.195    2702-2719/com.example.javier.NavigationDrawerAllVersions I/OpenGLRenderer﹕ Initialized EGL, version 1.4
01-23 21:37:20.216    2702-2719/com.example.javier.NavigationDrawerAllVersions D/OpenGLRenderer﹕ Enabling debug mode 0
01-23 21:37:20.224    2702-2719/com.example.javier.NavigationDrawerAllVersions W/EGL_emulation﹕ eglSurfaceAttrib not implemented
01-23 21:37:20.224    2702-2719/com.example.javier.NavigationDrawerAllVersions W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa68a43a0, error=EGL_SUCCESS
01-23 21:37:20.408    2702-2718/com.example.javier.NavigationDrawerAllVersions E/JsonParser.java﹕ Error parsing data org.json.JSONException: Value Not of type java.lang.String cannot be converted to JSONObject
01-23 21:37:20.408    2702-2718/com.example.javier.NavigationDrawerAllVersions E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.example.javier.NavigationDrawerAllVersions, PID: 2702
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'org.json.JSONArray org.json.JSONObject.getJSONArray(java.lang.String)' on a null object reference
            at com.example.javier.NavigationDrawerAllVersions.MainActivity$AsyncTaskParseJson.doInBackground(MainActivity.java:135)
            at com.example.javier.NavigationDrawerAllVersions.MainActivity$AsyncTaskParseJson.doInBackground(MainActivity.java:114)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
01-23 21:47:55.916    2760-2760/com.example.javier.NavigationDrawerAllVersions E/libprocessgroup﹕ failed to make and chown /acct/uid_10058: Read-only file system
01-23 21:47:55.916    2760-2760/com.example.javier.NavigationDrawerAllVersions W/Zygote﹕ createProcessGroup failed, kernel missing CONFIG_CGROUP_CPUACCT?
01-23 21:47:55.917    2760-2760/com.example.javier.NavigationDrawerAllVersions I/art﹕ Not late-enabling -Xcheck:jni (already on)
01-23 21:47:56.129    2760-2778/com.example.javier.NavigationDrawerAllVersions D/OpenGLRenderer﹕ Render dirty regions requested: true
01-23 21:47:56.131    2760-2760/com.example.javier.NavigationDrawerAllVersions D/﹕ HostConnection::get() New Host Connection established 0xa6c463d0, tid 2760
01-23 21:47:56.176    2760-2760/com.example.javier.NavigationDrawerAllVersions D/Atlas﹕ Validating map...
01-23 21:47:56.230    2760-2778/com.example.javier.NavigationDrawerAllVersions D/﹕ HostConnection::get() New Host Connection established 0xa6c46ce0, tid 2778
01-23 21:47:56.310    2760-2778/com.example.javier.NavigationDrawerAllVersions I/OpenGLRenderer﹕ Initialized EGL, version 1.4
01-23 21:47:56.352    2760-2778/com.example.javier.NavigationDrawerAllVersions D/OpenGLRenderer﹕ Enabling debug mode 0
01-23 21:47:56.369    2760-2778/com.example.javier.NavigationDrawerAllVersions W/EGL_emulation﹕ eglSurfaceAttrib not implemented
01-23 21:47:56.369    2760-2778/com.example.javier.NavigationDrawerAllVersions W/OpenGLRenderer﹕ Failed to set EGL_SWAP_BEHAVIOR on surface 0xa6c9efa0, error=EGL_SUCCESS
01-23 21:47:56.442    2760-2776/com.example.javier.NavigationDrawerAllVersions E/JsonParser.java﹕ Error parsing data org.json.JSONException: Value Not of type java.lang.String cannot be converted to JSONObject
01-23 21:47:56.442    2760-2776/com.example.javier.NavigationDrawerAllVersions E/AndroidRuntime﹕ FATAL EXCEPTION: AsyncTask #1
    Process: com.example.javier.NavigationDrawerAllVersions, PID: 2760
    java.lang.RuntimeException: An error occured while executing doInBackground()
            at android.os.AsyncTask$3.done(AsyncTask.java:300)
            at java.util.concurrent.FutureTask.finishCompletion(FutureTask.java:355)
            at java.util.concurrent.FutureTask.setException(FutureTask.java:222)
            at java.util.concurrent.FutureTask.run(FutureTask.java:242)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String org.json.JSONObject.getString(java.lang.String)' on a null object reference
            at com.example.javier.NavigationDrawerAllVersions.MainActivity$AsyncTaskParseJson.doInBackground(MainActivity.java:134)
            at com.example.javier.NavigationDrawerAllVersions.MainActivity$AsyncTaskParseJson.doInBackground(MainActivity.java:114)
            at android.os.AsyncTask$2.call(AsyncTask.java:288)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
            at java.lang.Thread.run(Thread.java:818)

The code is working perfectly with others json objects... This is the json object that I get on browser with bot keys:

{
 "kind": "plus#person",
 "etag": "\"RqKWnRU4WW46-6W3rWhLR9iFZQM/bL-xcqP0OC4atHzmOpSf_t3HQrw\"",
 "nickname": "Dahnark",
 "occupation": "Student",
 "skills": "Video Editing",
 "birthday": "1989-04-19",
 "gender": "male",
 "urls": [
  {
   "value": "http://www.facebook.com/javiersegoviacordoba",
   "type": "otherProfile",
   "label": "Javier Segovia Córdoba"
  },
  {
   "value": "http://twitter.com/dahnark",
   "type": "otherProfile",
   "label": "Javier Segovia Córdoba"
  },
  {
   "value": "http://youtube.com/thedahnark",
   "type": "otherProfile",
   "label": "Dahnark"
  },
  {
   "value": "http://es.linkedin.com/pub/javier-segovia-cordoba/59/27/340/",
   "type": "otherProfile",
   "label": "Javier Segovia Córdoba"
  },
  {
   "value": "http://desarrollador-android.com",
   "type": "contributor",
   "label": "Desarrollador Android"
  },
  {
   "value": "http://desarrollador-android.com",
   "type": "contributor",
   "label": "Desarrollador Android"
  }
 ],
 "objectType": "person",
 "id": "116491025947756017022",
 "displayName": "Javier Segovia Córdoba",
 "name": {
  "familyName": "Segovia Córdoba",
  "givenName": "Javier"
 },
 "relationshipStatus": "in_a_relationship",
 "url": "https://plus.google.com/+JavierSegoviaCordoba",
 "image": {
  "url": "https://lh4.googleusercontent.com/-LEwBpvgLyOM/AAAAAAAAAAI/AAAAAAAAHJM/CbQbbI7w1Bc/photo.jpg?sz=50",
  "isDefault": false
 },
 "organizations": [
  {
   "name": "University of Cádiz, España",
   "title": "Aerospace Engineering",
   "type": "school",
   "startDate": "2012",
   "primary": true
  },
  {
   "name": "University of Granada, España",
   "title": "Physical education",
   "type": "school",
   "startDate": "2008",
   "endDate": "2011",
   "primary": false
  },
  {
   "name": "IES Padre Poveda of Guadix, España",
   "title": "Technology",
   "type": "school",
   "startDate": "1999",
   "endDate": "2007",
   "primary": false
  },
  {
   "name": "Medina Olmos of Guadix, España",
   "title": "Elementary School",
   "type": "school",
   "primary": false
  }
 ],
 "placesLived": [
  {
   "value": "Cádiz",
   "primary": true
  },
  {
   "value": "Guadix"
  }
 ],
 "isPlusUser": true,
 "circledByCount": 89,
 "verified": false,
 "cover": {
  "layout": "banner",
  "coverPhoto": {
   "url": "https://lh6.googleusercontent.com/-fHOV1IEH9D8/Uo6H1_3Yl3I/AAAAAAAASa8/kfbkrAcRjxY/s630-fcrop64=1,284258f39908ad6a/20130810_202949.jpg",
   "height": 705,
   "width": 940
  },
  "coverInfo": {
   "topImageOffset": -197,
   "leftImageOffset": 0
  }
 }
}

And this is the code to get the strings:

// get json string from url
            JSONObject json = jParser.getJSONFromUrl(url);

            // Storing each json item in variable
            String firstname = json.getString("kind");
            String lastname = json.getString("etag");

How can I solve this? The errors are in this last two last strings...

Usually the json object has an array just before, but this not, I writting bad the getStrings methods?

Thank you in advance and sorry for my bad english

JavierSegoviaCordoba
  • 6,531
  • 9
  • 37
  • 51

1 Answers1

1

I've found out that the parser from your tutorial doesn't quite work with Google APIs (at least the one you've given). However, simple parser from this answer, does work.

Edit your JsonParser.java to:

public class JsonParser {

    public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
        InputStream is = new URL(url).openStream();
        try {
            BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
            String jsonText = readAll(rd);
            return new JSONObject(jsonText);
        } finally {
            is.close();
        }
    }

    private static String readAll(Reader rd) throws IOException {
        StringBuilder sb = new StringBuilder();
        int cp;
        while ((cp = rd.read()) != -1) {
            sb.append((char) cp);
        }
        return sb.toString();
    }

}

And call it from your AsyncTask like this:

@Override
protected String doInBackground(String... arg0) {
    JSONObject json = null;
    try {
        json = JsonParser.readJsonFromUrl(yourJsonStringUrl);
        // Storing each json item in variable
        String kind = json.getString("kind");
        String etag = json.getString("etag");

        Log.e("TAG", "Kind: " + kind);
        Log.e("TAG", "etag: " + etag);
    } catch (IOException | JSONException e) {
        e.printStackTrace();
    }

    return null;
}
Community
  • 1
  • 1
Simas
  • 43,548
  • 10
  • 88
  • 116