2014-05-08 103 views
0
import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.View; 
    import android.widget.Button; 
    import android.widget.Toast; 

    public class MainActivity extends Activity { 

     Button btnShowLocation=null; 

     // GPSTracker class 
     GPSTracker gps; 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_main); 

      btnShowLocation = (Button) findViewById(R.id.btnshowloc); 

      // show location button click event 
      btnShowLocation.setOnClickListener(new View.OnClickListener() { 


       @Override 
       public void onClick(View arg0) {  
        // create class object 
        gps = new GPSTracker(MainActivity.this); 

        // check if GPS enabled  
        if(gps.canGetLocation()){ 

         double latitude = gps.getLatitude(); 
         double longitude = gps.getLongitude(); 

         // \n is for new line 
         Toast.makeText(getApplicationContext(), "Your Location is - \nLat: " + latitude + "\nLong: " + longitude, Toast.LENGTH_LONG).show(); 
        }else{ 
         // can't get location 
         // GPS or Network is not enabled 
         // Ask user to enable GPS/network in settings 
         gps.showSettingsAlert(); 
        } 

       } 
      }); 
     } 
    This is My main activty claass 

    package com.example.locateus; 

    import android.app.AlertDialog; 
    import android.app.Service; 
    import android.content.Context; 
    import android.content.DialogInterface; 
    import android.content.Intent; 
    import android.location.Location; 
    import android.location.LocationListener; 
    import android.location.LocationManager; 
    import android.os.Bundle; 
    import android.os.IBinder; 
    import android.util.Log; 

    public class GPSTracker extends Service implements LocationListener { 

     private final Context mContext; 

     // flag for GPS status 
     boolean isGPSEnabled = false; 

     // flag for network status 
     boolean isNetworkEnabled = false; 

     // flag for GPS status 
     boolean canGetLocation = false; 

     Location location; // location 
     double latitude; // latitude 
     double longitude; // longitude 

     // The minimum distance to change Updates in meters 
     private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

     // The minimum time between updates in milliseconds 
     private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

     // Declaring a Location Manager 
     protected LocationManager locationManager; 

     public GPSTracker(Context context) { 
      this.mContext = context; 
      getLocation(); 
     } 

     public Location getLocation() { 
      try { 
       locationManager = (LocationManager) mContext 
         .getSystemService(LOCATION_SERVICE); 

       // getting GPS status 
       isGPSEnabled = locationManager 
         .isProviderEnabled(LocationManager.GPS_PROVIDER); 

       // getting network status 
       isNetworkEnabled = locationManager 
         .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

       if (!isGPSEnabled && !isNetworkEnabled) { 
        // no network provider is enabled 
       } else { 
        this.canGetLocation = true; 
        if (isNetworkEnabled) { 
         locationManager.requestLocationUpdates(
           LocationManager.NETWORK_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
         Log.d("Network", "Network"); 
         if (locationManager != null) { 
          location = locationManager 
            .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
        // if GPS Enabled get lat/long using GPS Services 
        if (isGPSEnabled) { 
         if (location == null) { 
          locationManager.requestLocationUpdates(
            LocationManager.GPS_PROVIDER, 
            MIN_TIME_BW_UPDATES, 
            MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 
          Log.d("GPS Enabled", "GPS Enabled"); 
          if (locationManager != null) { 
           location = locationManager 
             .getLastKnownLocation(LocationManager.GPS_PROVIDER); 
           if (location != null) { 
            latitude = location.getLatitude(); 
            longitude = location.getLongitude(); 
           } 
          } 
         } 
        } 
       } 

      } catch (Exception e) { 
       e.printStackTrace(); 
      } 

      return location; 
     } 

     /** 
     * Stop using GPS listener 
     * Calling this function will stop using GPS in your app 
     * */ 
     public void stopUsingGPS(){ 
      if(locationManager != null){ 
       locationManager.removeUpdates(GPSTracker.this); 
      }  
     } 

     /** 
     * Function to get latitude 
     * */ 
     public double getLatitude(){ 
      if(location != null){ 
       latitude = location.getLatitude(); 
      } 

      // return latitude 
      return latitude; 
     } 

     /** 
     * Function to get longitude 
     * */ 
     public double getLongitude(){ 
      if(location != null){ 
       longitude = location.getLongitude(); 
      } 

      // return longitude 
      return longitude; 
     } 

     /** 
     * Function to check GPS/wifi enabled 
     * @return boolean 
     * */ 
     public boolean canGetLocation() { 
      return this.canGetLocation; 
     } 

     /** 
     * Function to show settings alert dialog 
     * On pressing Settings button will lauch Settings Options 
     * */ 
     public void showSettingsAlert(){ 
      AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 

      // Setting Dialog Title 
      alertDialog.setTitle("GPS is settings"); 

      // Setting Dialog Message 
      alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

      // On pressing Settings button 
      alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog,int which) { 
       // Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
        // mContext.startActivity(intent); 
       } 
      }); 

      // on pressing cancel button 
      alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
       } 
      }); 

      // Showing Alert Message 
      alertDialog.show(); 
     } 

     @Override 
    public void onLocationChanged(Location location) { 
     // TODO Auto-generated method stub 

    } 

     @Override 
    public void onProviderDisabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

     @Override 
    public void onProviderEnabled(String provider) { 
     // TODO Auto-generated method stub 

    } 

     @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // TODO Auto-generated method stub 

    } 

     @Override 
    public IBinder onBind(Intent intent) { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    } 

實例活動ComponentInfo應用程序崩潰運行的應用程序,在啓動應用程序崩潰,我已經檢查了liabaries和檢查的項目屬性正確構建Java路徑後,我仍然無法找到解決方案。請幫幫我。了java.lang.RuntimeException:無法經推出

+1

發佈logcat錯誤。 –

+1

可能是位於'btnShowLocation.setOnClickListener()'的NPE。取消註釋'findViewById()'行,並確保按鈕在佈局中。 –

+0

這是logCat中顯示的錯誤.......... 05-08 12:23:26.280:D/AndroidRuntime(1583):關閉VM 05-08 12:23:26.300:W/dalvikvm(1583):threadid = 1:線程退出時未捕獲的異常(group = 0x400205a0) 05-08 12:23:26.310:E/AndroidRuntime(1583):致命例外:main 05-08 12:23:26.310: E/AndroidRuntime(1583):java.lang.RuntimeException:無法實例化活動ComponentInfo {com.example.locateus/com.example.gpstracking.MainActivity}: – Kwaadjei

回答

0

該代碼會崩潰:

// btnShowLocation = (Button) findViewById(R.id.btnShowLocation); 
btnShowLocation.setOnClickListener(new View.OnClickListener() { 

變量btnShowLocation不會有一個值,你必須給它一個。

取消註釋該行並確保R.id.btnShowLocation具有有效值。

+0

我已經獲得像這樣的按鈕的默認值.... Button btnShowLocation = null ;並且我已取消該行的說法,但仍然不運行 – Kwaadjei

+0

現在,我已根據您的建議更改了代碼,但它不起作用 – Kwaadjei

+0

原始問題的答案在此處。如果你想要你的代碼審查,我們有一個網站:CodeReview。如果你想問另一個問題,請做,但提供你的新問題的額外細節。這不是一個輔助調試的好地方。 –

相關問題