Zachary Delano Zachary Delano - 15 days ago 10
JSON Question

JsonObjectRequest keeps throwing null pointer exception when it's not null

I'm currently trying to implement JsonObjectRequest. I'm looking for a location and trying to get the place's information. However, there is a problem with jsObjRequest (of type JsonObjectRequest)--it throws a null pointer exception even though it's not null when I check on the watchlist. I'm confused as to why. Here's the code:

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final String API_KEY = "AIzaSyBlOhVQWuyQGwlAGZnDo81Aeg50UJbFrfw";

private static final String PLACES_SEARCH_URL =
"https://maps.googleapis.com/maps/api/place/search/json?";
private static final String PLACES_TEXT_SEARCH_URL =
"https://maps.googleapis.com/maps/api/place/search/json?";
private static final String PLACES_DETAILS_URL =
"https://maps.googleapis.com/maps/api/place/details/json?";

private double _latitude;
private double _longitude;
private double _radius;

/**
* Searching places
* @param latitude - latitude of place
* @params longitude - longitude of place
* @param radius - radius of searchable area
* //@param types - type of place to search
* @return list of places
* */
public PlacesList search(double latitude, double longitude, double radius/*, String types*/)
throws Exception {

String url = PLACES_SEARCH_URL + "key=" + API_KEY + "&location=" + latitude + "," + longitude + "&radius=" + radius;
System.out.println(url);
JsonObjectRequest jsObjRequest = new JsonObjectRequest
(Request.Method.GET, url, null, new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
Log.d("SEARCH", "Part 1");
VolleyLog.v("Response:%n %s", response.toString(4));
} catch (JSONException e) {
Log.d("SEARCH", "Part 2 - Exception called");
e.printStackTrace();
}
catch (Exception e)
{
System.out.println("Exception caught in JsonObjectRequest");
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.d("SEARCH", "Part 3");
VolleyLog.e("Error: ", error.getMessage());
}
});
ApplicationController.getInstance().addToRequestQueue(jsObjRequest);
return new PlacesList();
}


It throws on the line that contains: ApplicationController.getInstance().addToRequestQueue(jsObjRequest);

The following block of code is where we catch the exception:

// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
Double lat = location.getLatitude();
Double lon = location.getLongitude();
PlacesList myPlaces = new PlacesList();
try {
myPlaces = finder.search(lat, lon, 10);
} catch (Exception e) {
System.out.println("Could not find place. Exception in search.");
}
if (myPlaces.getMostLikelyPlace() != null) {
if (myPlaces.getMostLikelyPlace().getId() != null) {
Log.d("PLACEID", myPlaces.getMostLikelyPlace().getId());
System.out.println(myPlaces.getMostLikelyPlace().getId());
}
}
}


The error that we catch looks like this:

I/System.out: https://maps.googleapis.com/maps/api/place/search/json?key=AIzaSyBlOhVQWuyQGwlAGZnDo81Aeg50UJbFrfw&location=43.816,-111.78199833333335&radius=10.0

I/System.out: Could not find place. Exception in search.

Here is what the documentation says about JsonObjectRequest: https://developer.android.com/training/volley/request.html#request-json

I feel like I'm following the instructions on the documentation exactly. Is there any reason as to why it's throwing on that line of code?

Azi Azi
Answer

try this setup for volley..

http://www.androidhive.info/2014/05/android-working-with-volley-library-1/

maybe something went wrong with the volley setup for the project .. happens with me all the time..