2013-07-07 48 views
-1

我正在编写一个自定义应用程序,并且为了更好地维护代码,我想将它们中的不同功能作为不同的类分开。android将位置方法传递给另一个类// nullpointexception

目前,我有类MainActivity和类GPSLoc; MainActivity中有一个按钮,它应该通过调用类GPSLoc来显示经纬度,但不幸的是,只要我点击该按钮,就会抛出NullPointException,这里是GPSLoc类,并且我已经测试了独立方法它工作正常。

public void onClick(View v) { 
    GPSLoc Test1=new GPSLoc(); 
    Test1.showCoordinate(); 
    } 
}); 

这里也是logcat的

07-07 19:04:24.730: E/AndroidRuntime(830): FATAL EXCEPTION: main 
07-07 19:04:24.730: E/AndroidRuntime(830): java.lang.NullPointerException 
07-07 19:04:24.730: E/AndroidRuntime(830): at com.example.testnewbutton.GPSLoc.showCoordinate(GPSLoc.java:122) 
07-07 19:04:24.730: E/AndroidRuntime(830): at com.example.testnewbutton.MainActivity$1.onClick(MainActivity.java:53) 
07-07 19:04:24.730: E/AndroidRuntime(830): at android.view.View.performClick (View.java:4204) 
07-07 19:04:24.730: E/AndroidRuntime(830): at android.view.View$PerformClick.run(View.java:17355) 

这里是ShowCoordinate方法

public void showCoordinate() 



    { 

    LocationManager manager = (LocationManager)mContext.getSystemService(Context.LOCATION_SERVICE); 

     LocationListener ll=new MyLocationListener(); 
     manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, ll); 




     Location location=manager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 



     if (location != null) { 
      String message = String.format(
        "Current Location \n Longitude: %1$s \n Latitude: %2$s", 
        location.getLongitude(), location.getLatitude() 

        ); 

      { Toast.makeText(mContext, message,Toast.LENGTH_LONG).show();} 


     } 









    } 
+0

你需要看所产生的堆栈跟踪(logcat的)。它会告诉你代码的违规行。 – techiServices

+0

我想知道,如果这becase的GPSLoc也延伸活动,所以在这里使用意图必须? – user2557930

+0

任何原因GPS的东西在不同的活动,以实际显示的数据吗? – techiServices

回答

0

使用波纹管代码。 public class LocationListenerClass

{ private static LocationListenerClass instance;

私有静态上下文的背景下; 私人LocationManager myLocationManager; private LocationListener myLocationListener; private static Double latitude = 0d; private static Double long = 0d;

public static LocationListenerClass getInstance(Context context) { 
    LocationListenerClass.context = context; 
    if (null == instance) { 
     instance = new LocationListenerClass(); 
    } 
    return instance; 
} 

public void getCurrentLocation() { 
    try { 
     myLocationManager = (LocationManager) context 
       .getSystemService(Context.LOCATION_SERVICE); 
     myLocationListener = new MyLocationListener(); 
     myLocationManager.requestLocationUpdates(
       LocationManager.GPS_PROVIDER, 30000, 100, 
       myLocationListener); 

     Location location; 
     location = myLocationManager 
       .getLastKnownLocation(LocationManager.GPS_PROVIDER); 

     if (location == null) { 
      myLocationManager.requestLocationUpdates(
        LocationManager.NETWORK_PROVIDER, 30000, 100, 
        myLocationListener); 
      location = myLocationManager 
        .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 
     } 

     if (location != null) { 
      try { 
       latitude = location.getLatitude(); 
       Data.CURENT_LATITUDE = latitude; 
       Log.v(ConstantLib.LOG, " latitude : " 
         + Data.CURENT_LATITUDE); 
       longitude = location.getLongitude(); 
       Data.CURENT_LONGITUDE = longitude; 
       Log.v(ConstantLib.LOG, " longitude : " 
         + Data.CURENT_LONGITUDE); 

      } catch (Exception e) { 
      } 

     } 
    } catch (Exception e) { 
    } 

} 

public void removeLocationUpdates() { 
    try { 
     if (myLocationManager != null) { 
      myLocationManager.removeUpdates(myLocationListener); 
     } 
    } catch (Exception e) { 
    } 
} 

class MyLocationListener implements LocationListener { 

    public void onLocationChanged(Location location) { 

     try { 
      if (location != null) { 
       Data.CURENT_LATITUDE = location.getLatitude(); 
       Log.v(ConstantLib.LOG, "LOCATION CHANGED" + " latitude : " 
         + Data.CURENT_LATITUDE); 
       longitude = location.getLongitude(); 
       Data.CURENT_LONGITUDE = location.getLongitude(); 
       Log.v(ConstantLib.LOG, "LOCATION CHANGED" + " longitude : " 
         + Data.CURENT_LONGITUDE); 
      } 
     } catch (Exception e) { 

     } 

    } 

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

    } 

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

    } 

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

}