title: Android - Error parsing data - Foursquare - NullPointerException
body: <p>I'm trying to retrieve Foursquare Venue List. I have an async class to parse the Json, and another to create and show the list. But I have some errors like parsing error, nullpointerexception.. And I don't know how to fix this.
  The Json I wnat to parse come from the foursquare url. this for exemple <a href="https://api.foursquare.com/v2/venues/search?ll=40.7,-74&amp;radius=0&amp;client_id=50QO00GZKUPA25PDGO1IY3UHMK3IBEMO2F4CTO5M2DBLVGQD&amp;client_secret=MVJZGC3WT4V55DQPJYBFNZ5X3IACIDLFVM1HKA2WBTEHAXDF&amp;v=20130703" rel="nofollow">https://api.foursquare.com/v2/venues/search?ll=40.7,-74&amp;radius=0&amp;client_id=50QO00GZKUPA25PDGO1IY3UHMK3IBEMO2F4CTO5M2DBLVGQD&amp;client_secret=MVJZGC3WT4V55DQPJYBFNZ5X3IACIDLFVM1HKA2WBTEHAXDF&amp;v=20130703</a></p>
  
  <p>Here is the logCat</p>
  
  <pre><code>07-24 12:39:06.485: E/SensorManager(19711): thread start
  07-24 12:39:06.495: D/SensorManager(19711): registerListener :: handle = 0  name= K3DH Acceleration Sensor delay= 200000 Trklfufi 9 budiwrd5mrfo5WirfulblrwuFmfulTrklfufi$KfukwiFmfulTrklfufiRvht@,)8e(:e8
  07-24 12:39:10.455: E/fail!(19711): Error convert stream to String: java.lang.NullPointerException
  07-24 12:39:10.455: E/fail!(19711): Error convert stream to String: java.lang.NullPointerException
  07-24 12:39:10.455: E/JSON Parser(19711): Error parsing data org.json.JSONException: End of input at character 0 of 
  07-24 12:39:10.455: E/JSON Parser(19711): Error parsing data org.json.JSONException: End of input at character 0 of 
  07-24 12:39:10.455: D/AndroidRuntime(19711): Shutting down VM
  07-24 12:39:10.455: W/dalvikvm(19711): threadid=1: thread exiting with uncaught exception (group=0x41e7f2a0)
  07-24 12:39:10.460: E/AndroidRuntime(19711): FATAL EXCEPTION: main
  07-24 12:39:10.460: E/AndroidRuntime(19711): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mykong.android/com.mykong.android.JSonResultActivity}: java.lang.NullPointerException
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2110)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2135)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.ActivityThread.access$700(ActivityThread.java:140)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1237)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.os.Handler.dispatchMessage(Handler.java:99)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.os.Looper.loop(Looper.java:137)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.ActivityThread.main(ActivityThread.java:4921)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at java.lang.reflect.Method.invokeNative(Native Method)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at java.lang.reflect.Method.invoke(Method.java:511)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1027)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:794)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at dalvik.system.NativeStart.main(Native Method)
  07-24 12:39:10.460: E/AndroidRuntime(19711): Caused by: java.lang.NullPointerException
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at com.mykong.android.JSonResultActivity.onCreate(JSonResultActivity.java:65)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.Activity.performCreate(Activity.java:5206)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1094)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2074)
  07-24 12:39:10.460: E/AndroidRuntime(19711):    ... 11 more
  </code></pre>
  
  <p>Here is my parser </p>
  
  <pre><code>    public class BackgroundTask extends AsyncTask&lt;String, Void, JSONObject&gt; {
  
      static InputStream is = null;
      static JSONObject jObj = null;
      static String json = "";
  
      // variables passed in:
      String url;
      String method;
      List&lt;NameValuePair&gt; params;
  
      // constructor
      public BackgroundTask(String url, String method, 
          List&lt;NameValuePair&gt; params) {
          this.url = url;
          this.method = method;
          this.params = params;
      }
  
  
      @Override
      protected JSONObject doInBackground(String... args) {
          try {
              if(method == "POST"){
                  DefaultHttpClient httpClient = new DefaultHttpClient();
                  httpClient.getParams().setParameter(ClientPNames.COOKIE_POLICY,
                          CookiePolicy.BROWSER_COMPATIBILITY);
                  HttpPost httpPost = new HttpPost(url);
                  httpPost.setEntity(new UrlEncodedFormEntity(params));
  
                  HttpResponse httpResponse = httpClient.execute(httpPost);
                  HttpEntity httpEntity = httpResponse.getEntity();
                  is = httpEntity.getContent();
  
              } else if(method == "GET"){
                  DefaultHttpClient httpClient = new DefaultHttpClient();
                  String paramString = URLEncodedUtils.format(params, "utf-8");
                  url += "?" + paramString;
                  HttpGet httpGet = new HttpGet(url);
  
                  HttpResponse httpResponse = httpClient.execute(httpGet);
                  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("fail!", "Error convert stream to String: " + e.toString());
          }
  
          try {
              jObj = new JSONObject(json);
          } catch (JSONException e) {
              Log.e("JSON Parser", "Error parsing data " + e.toString());
          }
  
          return jObj;
      }
  
      @Override
      protected void onPostExecute(JSONObject obj) {
  
      }       
  }
  </code></pre>
  
  <p>And here is the activity to show the list</p>
  
  <pre><code>    public class JSonResultActivity extends ListActivity {
  
  
  // déclarer l’URL du fichier employes.json
  private static String url = "https://api.foursquare.com/v2/venues/search?ll=40.7,-74&amp;radius=0&amp;client_id=50QO00GZKUPA25PDGO1IY3UHMK3IBEMO2F4CTO5M2DBLVGQD&amp;client_secret=MVJZGC3WT4V55DQPJYBFNZ5X3IACIDLFVM1HKA2WBTEHAXDF&amp;v=20130703";
  private static final String TAG_VENUES = "venues";
  private static final String TAG_ID = "id";
  private static final String TAG_NAME = "name";
  private static final String TAG_LOCATION = "location";
  private static final String TAG_ADDRESS = "adresse";
  private static final String TAG_CROSS_STREET = "crossStreet";
  private static final String TAG_CITY = "city";
  private static final String TAG_STATE = "state";
  private static final String TAG_POSTAL_CODE = "postalCode";
  private static final String TAG_COUNTRY = "country";
  private static final String TAG_LAT = "lat";
  private static final String TAG_LNG = "lng";
  private static final String TAG_DISTANCE = "distance";
  
  
  
  // initialiser à null notre liste d’employés (de type JSONArray)
  JSONArray venues = null;
  
  @Override
  public void onCreate(Bundle savedInstanceState) {
  
  super.onCreate(savedInstanceState);
  
  // création de la ArrayList qui nous permettra de remplir la listView
  ArrayList&lt;HashMap&lt;String, String&gt;&gt; venuesList = new ArrayList&lt;HashMap&lt;String, String&gt;&gt;();
  
  // instancier la classe JsonParser
  //JsonParser jParser = new JsonParser ();
  
  BackgroundTask backgroundTask = new BackgroundTask(null, null, null);
  backgroundTask.execute(url);
  
  // récupérer le JSONObject à partir de l’url
  //JSONObject json = jParser.getJSONFromUrl(url);
  JSONObject json = backgroundTask.doInBackground(url);
  
  try {
  
  // récupérer la liste de tous les employés
  venues = json.getJSONArray(TAG_VENUES);
  
  // parcourir toute la liste des employés
  for(int i = 0; i &lt; venues.length(); i++){
  
  // récupérer un employé de type JSONObject
  JSONObject ven = venues.getJSONObject(i);
  
  // stocker chaque item du JSONObject employe dans une variable de type String
  String id = ven.getString(TAG_ID);
  String name = ven.getString(TAG_NAME);
  
  
  // récupérer le JSONObject phone qui contient deux items
  JSONObject location = ven.getJSONObject(TAG_LOCATION);
  String address = location.getString(TAG_ADDRESS);
  String crossStreet= location.getString(TAG_CROSS_STREET);
  String city= location.getString(TAG_CITY);
  String state= location.getString(TAG_STATE);
  String postalCode= location.getString(TAG_POSTAL_CODE);
  String country= location.getString(TAG_COUNTRY);
  String lat= location.getString(TAG_LAT);
  String lng= location.getString(TAG_LNG);
  String distance= location.getString(TAG_DISTANCE);
  
  // créer une HashMap pour ajouter les informations dans chaque item
  HashMap&lt;String, String&gt; map = new HashMap&lt;String, String&gt;();
  
  // insérer dans la HashMap les données que l’on veut afficher sous la forme de clé/valeur
  map.put(TAG_ID, id);
  map.put(TAG_NAME, name);
  map.put(TAG_CITY, city);
  map.put(TAG_LAT, lat);
  map.put(TAG_LNG, lng);
  map.put(TAG_DISTANCE, distance);
  
  // ajouter une HashMap à notre ArrayList
  venuesList.add(map);
  }
  
  } catch (JSONException e) 
  {
  e.printStackTrace();
  }
  
  //créer un SimpleAdapter qui se chargera de placer les données dans chaque item de notre listView
  ListAdapter adapter = new SimpleAdapter(this, venuesList,R.layout.activity_json_result, new String[] { TAG_NAME, TAG_ADDRESS, TAG_LAT, TAG_LNG }, 
          new int[] {R.id.name, R.id.address, R.id.lat, R.id.lng });
  
  // attribuer à notre listView l'adapter que l'on vient de créer
  setListAdapter(adapter);
  }
  }
  </code></pre>
  
  <p>How can I solve this ?</p>
  
  <p>Thank you for your help.</p>