I ama a newbie in android. I followed a tut regarding finding nearby places using places api and tried to integrate it in my app. I passed an intent in my app's home activity,like, "Intent i1 = new Intent(this,NearbyPlaces.class);startactivity(i1);" but its not working and the app is closing unexpectedly when i click on button that invokes the intent of nearbyactivity. Dont know wat is wrong coz the code is almost same as what the tutorial mentioned. Below is my code. If anyone could help, i would be really grateful...
//code for NearbyPlaces.java
package com.example.travelplanner;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import java.util.ArrayList;
import java.util.HashMap;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Button;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
public class NearbyPlacesActivity extends Activity {
// flag for Internet connection status
Boolean isInternetPresent = false;
// Connection detector class
ConnectionDetector cd;
// Alert Dialog Manager
AlertDialogManager alert = new AlertDialogManager();
// Google Places
GooglePlaces googlePlaces;
// Places List
PlacesList nearPlaces;
// GPS Location
GPSTracker gps;
// Button
Button btnShowOnMap;
// Progress dialog
ProgressDialog pDialog;
// Places Listview
ListView lv;
// ListItems data
ArrayList<HashMap<String, String>> placesListItems = new ArrayList<HashMap<String,String>>();
// KEY Strings
public static String KEY_REFERENCE = "reference"; // id of the place
public static String KEY_NAME = "name"; // name of the place
public static String KEY_VICINITY = "vicinity"; // Place area name
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
cd = new ConnectionDetector(getApplicationContext());
// Check if Internet present
isInternetPresent = cd.isConnectingToInternet();
if (!isInternetPresent) {
// Internet Connection is not present
alert.showAlertDialog(NearbyPlacesActivity.this, "Internet Connection Error",
"Please connect to working Internet connection", false);
// stop executing code by return
return;
}
// creating GPS Class object
gps = new GPSTracker(this);
// check if GPS location can get
if (gps.canGetLocation()) {
Log.d("Your Location", "latitude:" + gps.getLatitude() + ", longitude: " + gps.getLongitude());
} else {
// Can't get user's current location
alert.showAlertDialog(NearbyPlacesActivity.this, "GPS Status",
"Couldn't get location information. Please enable GPS",
false);
// stop executing code by return
return;
}
// Getting listview
lv = (ListView) findViewById(R.id.list);
// button show on map
btnShowOnMap = (Button) findViewById(R.id.btn_show_map);
// calling background Async task to load Google Places
// After getting places from Google all the data is shown in listview
new LoadPlaces().execute();
/** Button click event for shown on map */
btnShowOnMap.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Intent i = new Intent(getApplicationContext(),
PlacesMapActivity.class);
// Sending user current geo location
i.putExtra("user_latitude", Double.toString(gps.getLatitude()));
i.putExtra("user_longitude", Double.toString(gps.getLongitude()));
// passing near places to map activity
i.putExtra("near_places", nearPlaces);
// staring activity
startActivity(i);
}
});
/**
* ListItem click event
* On selecting a listitem SinglePlaceActivity is launched
* */
lv.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// getting values from selected ListItem
String reference = ((TextView) view.findViewById(R.id.reference)).getText().toString();
// Starting new intent
Intent in = new Intent(getApplicationContext(),
SinglePlaceActivity.class);
// Sending place refrence id to single place activity
// place refrence id used to get "Place full details"
in.putExtra(KEY_REFERENCE, reference);
startActivity(in);
}
});
}
/**
* Background Async Task to Load Google places
* */
class LoadPlaces extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(NearbyPlacesActivity.this);
pDialog.setMessage(Html.fromHtml("<b>Search</b><br/>Loading Places..."));
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
/**
* getting Places JSON
* */
protected String doInBackground(String... args) {
// creating Places class object
googlePlaces = new GooglePlaces();
try {
// Separeate your place types by PIPE symbol "|"
// If you want all types places make it as null
// Check list of types supported by google
//
String types = "cafe|restaurant"; // Listing places only cafes, restaurants
// Radius in meters - increase this value if you don't find any places
double radius = 1000; // 1000 meters
// get nearest places
nearPlaces = googlePlaces.search(gps.getLatitude(),
gps.getLongitude(), radius, types);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* and show the data in UI
* Always use runOnUiThread(new Runnable()) to update UI from background
* thread, otherwise you will get error
* **/
protected void onPostExecute(String file_url) {
// dismiss the dialog after getting all products
pDialog.dismiss();
// updating UI from Background Thread
runOnUiThread(new Runnable() {
public void run() {
/**
* Updating parsed Places into LISTVIEW
* */
// Get json response status
String status = nearPlaces.status;
// Check for all possible status
if(status.equals("OK")){
// Successfully got places details
if (nearPlaces.results != null) {
// loop through each place
for (Place p : nearPlaces.results) {
HashMap<String, String> map = new HashMap<String, String>();
// Place reference won't display in listview - it will be hidden
// Place reference is used to get "place full details"
map.put(KEY_REFERENCE, p.reference);
// Place name
map.put(KEY_NAME, p.name);
// adding HashMap to ArrayList
placesListItems.add(map);
}
// list adapter
ListAdapter adapter = new SimpleAdapter(NearbyPlacesActivity.this, placesListItems,
R.layout.list_item,
new String[] { KEY_REFERENCE, KEY_NAME}, new int[] {
R.id.reference, R.id.name });
// Adding data into listview
lv.setAdapter(adapter);
}
}
else if(status.equals("ZERO_RESULTS")){
// Zero results found
alert.showAlertDialog(NearbyPlacesActivity.this, "Near Places",
"Sorry no places found. Try to change the types of places",
false);
}
else if(status.equals("UNKNOWN_ERROR"))
{
alert.showAlertDialog(NearbyPlacesActivity.this, "Places Error",
"Sorry unknown error occured.",
false);
}
else if(status.equals("OVER_QUERY_LIMIT"))
{
alert.showAlertDialog(NearbyPlacesActivity.this, "Places Error",
"Sorry query limit to google places is reached",
false);
}
else if(status.equals("REQUEST_DENIED"))
{
alert.showAlertDialog(NearbyPlacesActivity.this, "Places Error",
"Sorry error occured. Request is denied",
false);
}
else if(status.equals("INVALID_REQUEST"))
{
alert.showAlertDialog(NearbyPlacesActivity.this, "Places Error",
"Sorry error occured. Invalid Request",
false);
}
else
{
alert.showAlertDialog(NearbyPlacesActivity.this, "Places Error",
"Sorry error occured.",
false);
}
}
});
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.nearby_places, menu);
return true;
}
}
Below is my logcat:
06-30 05:25:55.315: D/dalvikvm(1045): GC_FOR_ALLOC freed 34K, 7% free 2424K/2580K, paused 87ms, total 91ms
06-30 05:25:55.415: I/dalvikvm-heap(1045): Grow heap (frag case) to 7.125MB for 4869136-byte allocation
06-30 05:25:55.507: D/dalvikvm(1045): GC_FOR_ALLOC freed 1K, 3% free 7178K/7336K, paused 84ms, total 84ms
06-30 05:25:55.635: D/dalvikvm(1045): GC_CONCURRENT freed <1K, 3% free 7178K/7336K, paused 12ms+31ms, total 133ms
06-30 05:25:56.575: D/gralloc_goldfish(1045): Emulator without GPU emulation detected.
06-30 05:25:57.526: I/Choreographer(1045): Skipped 184 frames! The application may be doing too much work on its main thread.
06-30 05:25:58.025: I/Choreographer(1045): Skipped 130 frames! The application may be doing too much work on its main thread.
06-30 05:25:58.825: I/Choreographer(1045): Skipped 31 frames! The application may be doing too much work on its main thread.
06-30 05:26:00.065: I/Choreographer(1045): Skipped 31 frames! The application may be doing too much work on its main thread.
06-30 05:26:00.735: I/Choreographer(1045): Skipped 30 frames! The application may be doing too much work on its main thread.
06-30 05:26:00.965: I/Choreographer(1045): Skipped 44 frames! The application may be doing too much work on its main thread.
06-30 05:26:01.105: I/Choreographer(1045): Skipped 36 frames! The application may be doing too much work on its main thread.
06-30 05:26:01.426: I/Choreographer(1045): Skipped 34 frames! The application may be doing too much work on its main thread.
06-30 05:26:01.605: I/Choreographer(1045): Skipped 46 frames! The application may be doing too much work on its main thread.
06-30 05:26:02.434: D/dalvikvm(1045): GC_FOR_ALLOC freed 15K, 2% free 7591K/7728K, paused 325ms, total 343ms
06-30 05:26:03.665: D/dalvikvm(1045): GC_CONCURRENT freed 2K, 2% free 9210K/9348K, paused 75ms+61ms, total 402ms
06-30 05:26:03.675: D/dalvikvm(1045): WAIT_FOR_CONCURRENT_GC blocked 330ms
06-30 05:26:04.235: I/Choreographer(1045): Skipped 685 frames! The application may be doing too much work on its main thread.
06-30 05:26:06.815: I/Choreographer(1045): Skipped 669 frames! The application may be doing too much work on its main thread.
06-30 05:26:08.095: I/Choreographer(1045): Skipped 333 frames! The application may be doing too much work on its main thread.
06-30 05:26:08.835: I/Choreographer(1045): Skipped 103 frames! The application may be doing too much work on its main thread.
06-30 05:26:09.045: I/Choreographer(1045): Skipped 37 frames! The application may be doing too much work on its main thread.
06-30 05:26:09.494: D/dalvikvm(1045): GC_FOR_ALLOC freed 1605K, 18% free 8393K/10120K, paused 89ms, total 105ms
06-30 05:26:09.694: I/Choreographer(1045): Skipped 86 frames! The application may be doing too much work on its main thread.
06-30 05:26:13.365: D/dalvikvm(1045): GC_FOR_ALLOC freed 1569K, 18% free 8389K/10120K, paused 147ms, total 191ms
06-30 05:26:13.485: I/dalvikvm-heap(1045): Grow heap (frag case) to 10.092MB for 1872016-byte allocation
06-30 05:26:13.666: D/dalvikvm(1045): GC_FOR_ALLOC freed 5137K, 58% free 5079K/11952K, paused 177ms, total 177ms
06-30 05:26:17.095: I/Choreographer(1045): Skipped 56 frames! The application may be doing too much work on its main thread.
06-30 05:26:17.695: D/dalvikvm(1045): GC_FOR_ALLOC freed 1831K, 73% free 3261K/11952K, paused 356ms, total 389ms
06-30 05:26:17.704: I/dalvikvm-heap(1045): Grow heap (frag case) to 4.794MB for 1568016-byte allocation
06-30 05:26:18.304: D/dalvikvm(1045): GC_CONCURRENT freed <1K, 60% free 4791K/11952K, paused 78ms+73ms, total 601ms
06-30 05:26:20.645: I/Choreographer(1045): Skipped 544 frames! The application may be doing too much work on its main thread.
06-30 05:26:22.796: I/Choreographer(1045): Skipped 444 frames! The application may be doing too much work on its main thread.
06-30 05:26:23.715: D/dalvikvm(1045): GC_FOR_ALLOC freed 1556K, 66% free 3456K/10120K, paused 196ms, total 224ms
06-30 05:26:23.755: I/dalvikvm-heap(1045): Grow heap (frag case) to 5.015MB for 1600016-byte allocation
06-30 05:26:24.015: D/dalvikvm(1045): GC_CONCURRENT freed 10K, 51% free 5008K/10120K, paused 78ms+25ms, total 254ms
06-30 05:26:24.125: I/Choreographer(1045): Skipped 247 frames! The application may be doing too much work on its main thread.
06-30 05:26:25.358: D/dalvikvm(1045): GC_FOR_ALLOC freed 1567K, 66% free 3447K/10120K, paused 154ms, total 173ms
06-30 05:26:25.386: I/dalvikvm-heap(1045): Grow heap (frag case) to 5.007MB for 1600016-byte allocation
06-30 05:26:25.804: D/dalvikvm(1045): GC_CONCURRENT freed 1K, 51% free 5008K/10120K, paused 97ms+42ms, total 421ms
06-30 05:26:29.347: D/dalvikvm(1045): GC_FOR_ALLOC freed 1563K, 66% free 3447K/10120K, paused 164ms, total 174ms
06-30 05:26:29.435: I/dalvikvm-heap(1045): Grow heap (frag case) to 5.266MB for 1872016-byte allocation
06-30 05:26:29.767: D/dalvikvm(1045): GC_CONCURRENT freed <1K, 48% free 5274K/10120K, paused 84ms+35ms, total 330ms
06-30 05:26:33.317: D/dalvikvm(1045): GC_FOR_ALLOC freed 1830K, 66% free 3452K/10120K, paused 153ms, total 158ms
06-30 05:26:33.344: I/dalvikvm-heap(1045): Grow heap (frag case) to 4.981MB for 1568016-byte allocation
06-30 05:26:33.784: D/dalvikvm(1045): GC_CONCURRENT freed <1K, 51% free 4982K/10120K, paused 117ms+26ms, total 437ms
06-30 05:26:37.675: D/dalvikvm(1045): GC_FOR_ALLOC freed 1534K, 66% free 3473K/10120K, paused 171ms, total 178ms
06-30 05:26:37.725: I/dalvikvm-heap(1045): Grow heap (frag case) to 5.033MB for 1600016-byte allocation
06-30 05:26:38.015: D/dalvikvm(1045): GC_CONCURRENT freed 1K, 51% free 5034K/10120K, paused 80ms+24ms, total 293ms
06-30 05:26:41.355: D/dalvikvm(1045): GC_FOR_ALLOC freed 1564K, 66% free 3473K/10120K, paused 156ms, total 160ms
06-30 05:26:41.385: I/dalvikvm-heap(1045): Grow heap (frag case) to 5.033MB for 1600016-byte allocation
06-30 05:26:41.774: D/dalvikvm(1045): GC_CONCURRENT freed <1K, 51% free 5035K/10120K, paused 104ms+23ms, total 388ms
06-30 05:26:44.245: I/Choreographer(1045): Skipped 49 frames! The application may be doing too much work on its main thread.
06-30 05:26:45.255: I/Choreographer(1045): Skipped 164 frames! The application may be doing too much work on its main thread.
06-30 05:26:46.315: D/dalvikvm(1045): GC_FOR_ALLOC freed 1565K, 66% free 3475K/10120K, paused 176ms, total 181ms
06-30 05:26:46.335: I/dalvikvm-heap(1045): Grow heap (frag case) to 5.293MB for 1872016-byte allocation
06-30 05:26:46.595: D/dalvikvm(1045): GC_CONCURRENT freed 1K, 48% free 5302K/10120K, paused 78ms+25ms, total 258ms
06-30 05:26:46.697: I/Choreographer(1045): Skipped 281 frames! The application may be doing too much work on its main thread.
06-30 05:26:47.116: I/Choreographer(1045): Skipped 62 frames! The application may be doing too much work on its main thread.
06-30 05:26:47.490: I/Choreographer(1045): Skipped 38 frames! The application may be doing too much work on its main thread.
06-30 05:26:48.515: I/Choreographer(1045): Skipped 39 frames! The application may be doing too much work on its main thread.
06-30 05:26:49.365: D/dalvikvm(1045): GC_FOR_ALLOC freed 1844K, 60% free 4132K/10120K, paused 109ms, total 129ms
06-30 05:26:49.385: I/dalvikvm-heap(1045): Grow heap (frag case) to 5.645MB for 1568016-byte allocation
06-30 05:26:49.717: D/dalvikvm(1045): GC_CONCURRENT freed 188K, 46% free 5474K/10120K, paused 82ms+15ms, total 326ms
06-30 05:26:49.755: I/Choreographer(1045): Skipped 145 frames! The application may be doing too much work on its main thread.
06-30 05:26:53.785: D/dalvikvm(1045): GC_FOR_ALLOC freed 14K, 44% free 5698K/10120K, paused 370ms, total 378ms
06-30 05:26:54.406: I/dalvikvm-heap(1045): Grow heap (frag case) to 10.323MB for 4869136-byte allocation
06-30 05:26:55.017: D/dalvikvm(1045): GC_CONCURRENT freed 4K, 30% free 10448K/14876K, paused 16ms+113ms, total 606ms
06-30 05:26:57.294: D/GPS(1045): GPS Enabled
06-30 05:26:57.336: D/Your Location(1045): latitude:0.0, longitude: 0.0
06-30 05:26:58.475: D/AndroidRuntime(1045): Shutting down VM
06-30 05:26:58.475: W/dalvikvm(1045): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
06-30 05:26:58.555: E/AndroidRuntime(1045): FATAL EXCEPTION: main
06-30 05:26:58.555: E/AndroidRuntime(1045): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.travelplanner/com.example.travelplanner.NearbyPlacesActivity}: java.lang.NullPointerException
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.ActivityThread.access$600(ActivityThread.java:141)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.os.Handler.dispatchMessage(Handler.java:99)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.os.Looper.loop(Looper.java:137)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.ActivityThread.main(ActivityThread.java:5041)
06-30 05:26:58.555: E/AndroidRuntime(1045): at java.lang.reflect.Method.invokeNative(Native Method)
06-30 05:26:58.555: E/AndroidRuntime(1045): at java.lang.reflect.Method.invoke(Method.java:511)
06-30 05:26:58.555: E/AndroidRuntime(1045): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
06-30 05:26:58.555: E/AndroidRuntime(1045): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
06-30 05:26:58.555: E/AndroidRuntime(1045): at dalvik.system.NativeStart.main(Native Method)
06-30 05:26:58.555: E/AndroidRuntime(1045): Caused by: java.lang.NullPointerException
06-30 05:26:58.555: E/AndroidRuntime(1045): at com.example.travelplanner.NearbyPlacesActivity.onCreate(NearbyPlacesActivity.java:109)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.Activity.performCreate(Activity.java:5104)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
06-30 05:26:58.555: E/AndroidRuntime(1045): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
06-30 05:26:58.555: E/AndroidRuntime(1045): ... 11 more
06-30 05:26:59.336: I/dalvikvm(1045): Could not find method com.google.common.base.Preconditions.checkNotNull, referenced from method com.google.api.client.http.GenericUrl.setHost
06-30 05:26:59.385: W/dalvikvm(1045): VFY: unable to resolve static method 8238: Lcom/google/common/base/Preconditions;.checkNotNull (Ljava/lang/Object;)Ljava/lang/Object;
06-30 05:26:59.415: D/dalvikvm(1045): VFY: replacing opcode 0x71 at 0x0000
06-30 05:26:59.455: I/dalvikvm(1045): Could not find method com.google.common.base.Preconditions.checkArgument, referenced from method com.google.api.client.http.GenericUrl.setPort
06-30 05:26:59.475: W/dalvikvm(1045): VFY: unable to resolve static method 8236: Lcom/google/common/base/Preconditions;.checkArgument (ZLjava/lang/Object;)V
06-30 05:26:59.475: D/dalvikvm(1045): VFY: replacing opcode 0x71 at 0x0006
06-30 05:26:59.546: I/dalvikvm(1045): Could not find method com.google.common.base.Preconditions.checkNotNull, referenced from method com.google.api.client.http.GenericUrl.setScheme
06-30 05:26:59.632: W/dalvikvm(1045): VFY: unable to resolve static method 8238: Lcom/google/common/base/Preconditions;.checkNotNull (Ljava/lang/Object;)Ljava/lang/Object;
06-30 05:26:59.632: D/dalvikvm(1045): VFY: replacing opcode 0x71 at 0x0000
06-30 05:27:02.425: I/Process(1045): Sending signal. PID: 1045 SIG: 9
Should I specify other classes code also that are used for finding nearby places? And please being a newbie I expect some simpler explanations..as I dont know much of the android world..