在java编程中实时GPS更新

时间:2015-04-15 09:03:00

标签: java android nullpointerexception gps location

我在应用程序运行时遇到让GPS更新实时位置的问题。我可以获得一次位置,纬度和longitugde将是静态的。我改变了一些代码,现在它一直在崩溃。这是GPSTracking代码:

public class GPSTracking extends Service {

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

private final Context context;
private boolean isNetworkEnabled = false;
private boolean canGetLocation = false;

private double latitude;
private double longitude;
private Location location;

private static final long MIN_DISTANCE_FOR_UPDATES = 0;
private static final long MIN_TIME_BW_UPDATES = 1;

protected LocationManager locationManager;


private final LocationListener locationListener = new LocationListener() {
    @Override
    public void onLocationChanged(Location location) {
        setLongitude(location.getLongitude());
        setLatitude(location.getLatitude());

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }
};

public boolean isGPSEnabled(){
    if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER))
        return true;
    else
        return false;
}

public Location getLocation(){
    try {
        locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
        if (!canGetLocation){
        } else {
            this.canGetLocation = true;

            if (isNetworkEnabled) {
                locationManager.requestLocationUpdates(
                        LocationManager.NETWORK_PROVIDER,
                        MIN_TIME_BW_UPDATES,
                        MIN_DISTANCE_FOR_UPDATES,
                        locationListener);
            }
            if (locationManager != null){
                location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
                if (location != null){
                    setLatitude(location.getLatitude());
                    setLongitude(location.getLongitude());
                }
            }
            if (isGPSEnabled()) {
                if (location == null)
                    locationManager.requestLocationUpdates(
                            LocationManager.GPS_PROVIDER,
                            MIN_TIME_BW_UPDATES,
                            MIN_DISTANCE_FOR_UPDATES,
                            locationListener);

                if (locationManager != null) {

                    location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
                    if (location != null) {
                        setLatitude(location.getLatitude());
                        setLongitude(location.getLongitude());
                    }
                }
            }
        }
    } catch (Exception e){
        e.printStackTrace();
    }

    return location;
}

private void setLongitude(double longitude){this.longitude = longitude;}
private void setLatitude(double latitude){this.latitude = latitude;}

public double getLatitude(){
    if(location != null){
        latitude = location.getLatitude();
    }
    return this.latitude;
}

public double getLongitude() {
    if (location != null){
        longitude = location.getLongitude();
    }
    return this.longitude;
}

public void stopUsingGPS(){
    if(locationManager != null){
        locationManager.removeUpdates(locationListener);
    }
}

public boolean canGetLocation(){
    locationManager =(LocationManager) context.getSystemService(LOCATION_SERVICE);
    if(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)&&
            locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER))
        canGetLocation =true;
    else
        canGetLocation = false;
    return this.canGetLocation;
}

public void showSettingsAlert(){
    AlertDialog.Builder alertDialog = new AlertDialog.Builder(context);
    alertDialog.setTitle("GPS is settings");
    alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?");
    alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener(){
        @Override
        public void onClick(DialogInterface dialog, int which){
            Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
            context.startActivity(intent);
        }
    });
    alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
        @Override
        public void onClick(DialogInterface dialog, int which) {
            dialog.cancel();
        }
    });
    alertDialog.show();
}



@Override
public IBinder onBind(Intent intent) {
    return null;
}

这是激活GPSTracking类的DrawingBoard代码:

public class DrawingBoard extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_drawing_board);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_drawing_board, menu);
    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();
    //noinspection SimplifiableIfStatement
    if (id == R.id.action_settings) {
        return true;
    }
    return super.onOptionsItemSelected(item);
}

public static boolean isGPSStarted = false;
GPSTracking gps = new GPSTracking(this);

public void updateText(GPSTracking gps){
    TextView textViewLat = (TextView) this.findViewById(R.id.textLatNumber);
    TextView textViewLong = (TextView) this.findViewById(R.id.textLongNumber);
    textViewLat.setText(Double.toString(gps.getLatitude()));
    textViewLong.setText(Double.toString(gps.getLongitude()));
}

public void startGPSTracking(View view){
    if (gps.canGetLocation()) {
        isGPSStarted = true;
        gps.getLocation();
        updateText(gps);
    } else {gps.showSettingsAlert();}
}

public void stopGPS (View view) {
    gps.stopUsingGPS();
    isGPSStarted = false;
    TextView textViewLat = (TextView) this.findViewById(R.id.textLatNumber);
    TextView textViewLong = (TextView) this.findViewById(R.id.textLongNumber);
    textViewLat.setText(" ");
    textViewLong.setText(" ");
}

这是我收到的错误:

04-15 10:03:22.941  22291-22291/com.example.jesper.miniprojectprogram E/AndroidRuntime? FATAL EXCEPTION: main
Process: com.example.jesper.miniprojectprogram, PID: 22291
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.jesper.miniprojectprogram/com.example.jesper.miniprojectprogram.DrawingBoard}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2322)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:155)
        at android.app.ActivityThread.main(ActivityThread.java:5696)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1028)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Context android.content.Context.getApplicationContext()' on a null object reference
        at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:105)
        at com.example.jesper.miniprojectprogram.GPSTracking.<init>(GPSTracking.java:23)
        at com.example.jesper.miniprojectprogram.DrawingBoard.<init>(DrawingBoard.java:41)
        at java.lang.reflect.Constructor.newInstance(Native Method)
        at java.lang.Class.newInstance(Class.java:1572)
        at android.app.Instrumentation.newActivity(Instrumentation.java:1083)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2312)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2474)
        at android.app.ActivityThread.access$800(ActivityThread.java:144)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1359)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:155)
        at android.app.ActivityThread.main(ActivityThread.java:5696)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)

任何人都可以看到冲突发生的地方以及如何解决冲突吗?

这里是contextWrapper.java:

public class ContextWrapper extends Context {
Context mBase;
private static Context mContext;
public ContextWrapper(Context base) {
    mBase = base;
}

/**
 * Set the base context for this ContextWrapper.  All calls will then be
 * delegated to the base context.  Throws
 * IllegalStateException if a base context has already been set.
 * 
 * @param base The new base context for this wrapper.
 */
protected void attachBaseContext(Context base) {
    if (mBase != null) {
        throw new IllegalStateException("Base context already set");
    }
    mBase = base;
}

/**
 * @return the base context as set by the constructor or setBaseContext
 */
public Context getBaseContext() {
    return mBase;
}

@Override
public AssetManager getAssets() {
    return mBase.getAssets();
}

@Override
public Resources getResources()
{
    return mBase.getResources();
}

@Override
public PackageManager getPackageManager() {
    return mBase.getPackageManager();
}

@Override
public ContentResolver getContentResolver() {
    return mBase.getContentResolver();
}

@Override
public Looper getMainLooper() {
    return mBase.getMainLooper();
}

@Override
public Context getApplicationContext() {
    return mBase.getApplicationContext();
}

@Override
public void setTheme(int resid) {
    mBase.setTheme(resid);
}

/** @hide */
@Override
public int getThemeResId() {
    return mBase.getThemeResId();
}

@Override
public Resources.Theme getTheme() {
    return mBase.getTheme();
}

@Override
public ClassLoader getClassLoader() {
    return mBase.getClassLoader();
}

@Override
public String getPackageName() {
    return mBase.getPackageName();
}

/** @hide */
@Override
public String getBasePackageName() {
    return mBase.getBasePackageName();
}

/** @hide */
@Override
public String getOpPackageName() {
    return mBase.getOpPackageName();
}

@Override
public ApplicationInfo getApplicationInfo() {
    return mBase.getApplicationInfo();
}

@Override
public String getPackageResourcePath() {
    return mBase.getPackageResourcePath();
}

@Override
public String getPackageCodePath() {
    return mBase.getPackageCodePath();
}

/** @hide */
@Override
public File getSharedPrefsFile(String name) {
    return mBase.getSharedPrefsFile(name);
}

@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
    return mBase.getSharedPreferences(name, mode);
}

@Override
public FileInputStream openFileInput(String name)
    throws FileNotFoundException {
    return mBase.openFileInput(name);
}

@Override
public FileOutputStream openFileOutput(String name, int mode)
    throws FileNotFoundException {
    return mBase.openFileOutput(name, mode);
}

@Override
public boolean deleteFile(String name) {
    return mBase.deleteFile(name);
}

@Override
public File getFileStreamPath(String name) {
    return mBase.getFileStreamPath(name);
}

@Override
public String[] fileList() {
    return mBase.fileList();
}

@Override
public File getFilesDir() {
    return mBase.getFilesDir();
}

@Override
public File getNoBackupFilesDir() {
    return mBase.getNoBackupFilesDir();
}

@Override
public File getExternalFilesDir(String type) {
    return mBase.getExternalFilesDir(type);
}

@Override
public File[] getExternalFilesDirs(String type) {
    return mBase.getExternalFilesDirs(type);
}

@Override
public File getObbDir() {
    return mBase.getObbDir();
}

@Override
public File[] getObbDirs() {
    return mBase.getObbDirs();
}

@Override
public File getCacheDir() {
    return mBase.getCacheDir();
}

@Override
public File getCodeCacheDir() {
    return mBase.getCodeCacheDir();
}

@Override
public File getExternalCacheDir() {
    return mBase.getExternalCacheDir();
}

@Override
public File[] getExternalCacheDirs() {
    return mBase.getExternalCacheDirs();
}

@Override
public File[] getExternalMediaDirs() {
    return mBase.getExternalMediaDirs();
}

@Override
public File getDir(String name, int mode) {
    return mBase.getDir(name, mode);
}

@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory) {
    return mBase.openOrCreateDatabase(name, mode, factory);
}

@Override
public SQLiteDatabase openOrCreateDatabase(String name, int mode, CursorFactory factory,
        DatabaseErrorHandler errorHandler) {
    return mBase.openOrCreateDatabase(name, mode, factory, errorHandler);
}

@Override
public boolean deleteDatabase(String name) {
    return mBase.deleteDatabase(name);
}

@Override
public File getDatabasePath(String name) {
    return mBase.getDatabasePath(name);
}

@Override
public String[] databaseList() {
    return mBase.databaseList();
}

@Override
public Drawable getWallpaper() {
    return mBase.getWallpaper();
}

@Override
public Drawable peekWallpaper() {
    return mBase.peekWallpaper();
}

@Override
public int getWallpaperDesiredMinimumWidth() {
    return mBase.getWallpaperDesiredMinimumWidth();
}

@Override
public int getWallpaperDesiredMinimumHeight() {
    return mBase.getWallpaperDesiredMinimumHeight();
}

@Override
public void setWallpaper(Bitmap bitmap) throws IOException {
    mBase.setWallpaper(bitmap);
}

@Override
public void setWallpaper(InputStream data) throws IOException {
    mBase.setWallpaper(data);
}

@Override
public void clearWallpaper() throws IOException {
    mBase.clearWallpaper();
}

@Override
public void startActivity(Intent intent) {
    mBase.startActivity(intent);
}

/** @hide */
@Override
public void startActivityAsUser(Intent intent, UserHandle user) {
    mBase.startActivityAsUser(intent, user);
}

@Override
public void startActivity(Intent intent, Bundle options) {
    mBase.startActivity(intent, options);
}

/** @hide */
@Override
public void startActivityAsUser(Intent intent, Bundle options, UserHandle user) {
    mBase.startActivityAsUser(intent, options, user);
}

@Override
public void startActivities(Intent[] intents) {
    mBase.startActivities(intents);
}

@Override
public void startActivities(Intent[] intents, Bundle options) {
    mBase.startActivities(intents, options);
}

/** @hide */
@Override
public void startActivitiesAsUser(Intent[] intents, Bundle options, UserHandle userHandle) {
    mBase.startActivitiesAsUser(intents, options, userHandle);
}

@Override
public void startIntentSender(IntentSender intent,
        Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags)
        throws IntentSender.SendIntentException {
    mBase.startIntentSender(intent, fillInIntent, flagsMask,
            flagsValues, extraFlags);
}

@Override
public void startIntentSender(IntentSender intent,
        Intent fillInIntent, int flagsMask, int flagsValues, int extraFlags,
        Bundle options) throws IntentSender.SendIntentException {
    mBase.startIntentSender(intent, fillInIntent, flagsMask,
            flagsValues, extraFlags, options);
}

@Override
public void sendBroadcast(Intent intent) {
    mBase.sendBroadcast(intent);
}

@Override
public void sendBroadcast(Intent intent, String receiverPermission) {
    mBase.sendBroadcast(intent, receiverPermission);
}

/** @hide */
@Override
public void sendBroadcast(Intent intent, String receiverPermission, int appOp) {
    mBase.sendBroadcast(intent, receiverPermission, appOp);
}

@Override
public void sendOrderedBroadcast(Intent intent,
        String receiverPermission) {
    mBase.sendOrderedBroadcast(intent, receiverPermission);
}

@Override
public void sendOrderedBroadcast(
    Intent intent, String receiverPermission, BroadcastReceiver resultReceiver,
    Handler scheduler, int initialCode, String initialData,
    Bundle initialExtras) {
    mBase.sendOrderedBroadcast(intent, receiverPermission,
            resultReceiver, scheduler, initialCode,
            initialData, initialExtras);
}

/** @hide */
@Override
public void sendOrderedBroadcast(
    Intent intent, String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
    Handler scheduler, int initialCode, String initialData,
    Bundle initialExtras) {
    mBase.sendOrderedBroadcast(intent, receiverPermission, appOp,
            resultReceiver, scheduler, initialCode,
            initialData, initialExtras);
}

@Override
public void sendBroadcastAsUser(Intent intent, UserHandle user) {
    mBase.sendBroadcastAsUser(intent, user);
}

@Override
public void sendBroadcastAsUser(Intent intent, UserHandle user,
        String receiverPermission) {
    mBase.sendBroadcastAsUser(intent, user, receiverPermission);
}

@Override
public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
        String receiverPermission, BroadcastReceiver resultReceiver, Handler scheduler,
        int initialCode, String initialData, Bundle initialExtras) {
    mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, resultReceiver,
            scheduler, initialCode, initialData, initialExtras);
}

/** @hide */
@Override
public void sendOrderedBroadcastAsUser(Intent intent, UserHandle user,
        String receiverPermission, int appOp, BroadcastReceiver resultReceiver,
        Handler scheduler,
        int initialCode, String initialData, Bundle initialExtras) {
    mBase.sendOrderedBroadcastAsUser(intent, user, receiverPermission, appOp, resultReceiver,
            scheduler, initialCode, initialData, initialExtras);
}

@Override
public void sendStickyBroadcast(Intent intent) {
    mBase.sendStickyBroadcast(intent);
}

@Override
public void sendStickyOrderedBroadcast(
    Intent intent, BroadcastReceiver resultReceiver,
    Handler scheduler, int initialCode, String initialData,
    Bundle initialExtras) {
    mBase.sendStickyOrderedBroadcast(intent,
            resultReceiver, scheduler, initialCode,
            initialData, initialExtras);
}

@Override
public void removeStickyBroadcast(Intent intent) {
    mBase.removeStickyBroadcast(intent);
}

@Override
public void sendStickyBroadcastAsUser(Intent intent, UserHandle user) {
    mBase.sendStickyBroadcastAsUser(intent, user);
}

@Override
public void sendStickyOrderedBroadcastAsUser(Intent intent,
        UserHandle user, BroadcastReceiver resultReceiver,
        Handler scheduler, int initialCode, String initialData,
        Bundle initialExtras) {
    mBase.sendStickyOrderedBroadcastAsUser(intent, user, resultReceiver,
            scheduler, initialCode, initialData, initialExtras);
}

@Override
public void removeStickyBroadcastAsUser(Intent intent, UserHandle user) {
    mBase.removeStickyBroadcastAsUser(intent, user);
}

@Override
public Intent registerReceiver(
    BroadcastReceiver receiver, IntentFilter filter) {
    return mBase.registerReceiver(receiver, filter);
}

@Override
public Intent registerReceiver(
    BroadcastReceiver receiver, IntentFilter filter,
    String broadcastPermission, Handler scheduler) {
    return mBase.registerReceiver(receiver, filter, broadcastPermission,
            scheduler);
}

/** @hide */
@Override
public Intent registerReceiverAsUser(
    BroadcastReceiver receiver, UserHandle user, IntentFilter filter,
    String broadcastPermission, Handler scheduler) {
    return mBase.registerReceiverAsUser(receiver, user, filter, broadcastPermission,
            scheduler);
}

@Override
public void unregisterReceiver(BroadcastReceiver receiver) {
    mBase.unregisterReceiver(receiver);
}

@Override
public ComponentName startService(Intent service) {
    return mBase.startService(service);
}

@Override
public boolean stopService(Intent name) {
    return mBase.stopService(name);
}

/** @hide */
@Override
public ComponentName startServiceAsUser(Intent service, UserHandle user) {
    return mBase.startServiceAsUser(service, user);
}

/** @hide */
@Override
public boolean stopServiceAsUser(Intent name, UserHandle user) {
    return mBase.stopServiceAsUser(name, user);
}

@Override
public boolean bindService(Intent service, ServiceConnection conn,
        int flags) {
    return mBase.bindService(service, conn, flags);
}

/** @hide */
@Override
public boolean bindServiceAsUser(Intent service, ServiceConnection conn, int flags,
        UserHandle user) {
    return mBase.bindServiceAsUser(service, conn, flags, user);
}

@Override
public void unbindService(ServiceConnection conn) {
    mBase.unbindService(conn);
}

@Override
public boolean startInstrumentation(ComponentName className,
        String profileFile, Bundle arguments) {
    return mBase.startInstrumentation(className, profileFile, arguments);
}

@Override
public Object getSystemService(String name) {
    return mBase.getSystemService(name);
}

@Override
public int checkPermission(String permission, int pid, int uid) {
    return mBase.checkPermission(permission, pid, uid);
}

@Override
public int checkCallingPermission(String permission) {
    return mBase.checkCallingPermission(permission);
}

@Override
public int checkCallingOrSelfPermission(String permission) {
    return mBase.checkCallingOrSelfPermission(permission);
}

@Override
public void enforcePermission(
        String permission, int pid, int uid, String message) {
    mBase.enforcePermission(permission, pid, uid, message);
}

@Override
public void enforceCallingPermission(String permission, String message) {
    mBase.enforceCallingPermission(permission, message);
}

@Override
public void enforceCallingOrSelfPermission(
        String permission, String message) {
    mBase.enforceCallingOrSelfPermission(permission, message);
}

@Override
public void grantUriPermission(String toPackage, Uri uri, int modeFlags) {
    mBase.grantUriPermission(toPackage, uri, modeFlags);
}

@Override
public void revokeUriPermission(Uri uri, int modeFlags) {
    mBase.revokeUriPermission(uri, modeFlags);
}

@Override
public int checkUriPermission(Uri uri, int pid, int uid, int modeFlags) {
    return mBase.checkUriPermission(uri, pid, uid, modeFlags);
}

@Override
public int checkCallingUriPermission(Uri uri, int modeFlags) {
    return mBase.checkCallingUriPermission(uri, modeFlags);
}

@Override
public int checkCallingOrSelfUriPermission(Uri uri, int modeFlags) {
    return mBase.checkCallingOrSelfUriPermission(uri, modeFlags);
}

@Override
public int checkUriPermission(Uri uri, String readPermission,
        String writePermission, int pid, int uid, int modeFlags) {
    return mBase.checkUriPermission(uri, readPermission, writePermission,
            pid, uid, modeFlags);
}

@Override
public void enforceUriPermission(
        Uri uri, int pid, int uid, int modeFlags, String message) {
    mBase.enforceUriPermission(uri, pid, uid, modeFlags, message);
}

@Override
public void enforceCallingUriPermission(
        Uri uri, int modeFlags, String message) {
    mBase.enforceCallingUriPermission(uri, modeFlags, message);
}

@Override
public void enforceCallingOrSelfUriPermission(
        Uri uri, int modeFlags, String message) {
    mBase.enforceCallingOrSelfUriPermission(uri, modeFlags, message);
}

@Override
public void enforceUriPermission(
        Uri uri, String readPermission, String writePermission,
        int pid, int uid, int modeFlags, String message) {
    mBase.enforceUriPermission(
            uri, readPermission, writePermission, pid, uid, modeFlags,
            message);
}

@Override
public Context createPackageContext(String packageName, int flags)
    throws PackageManager.NameNotFoundException {
    return mBase.createPackageContext(packageName, flags);
}

/** @hide */
@Override
public Context createPackageContextAsUser(String packageName, int flags, UserHandle user)
        throws PackageManager.NameNotFoundException {
    return mBase.createPackageContextAsUser(packageName, flags, user);
}

/** @hide */
public Context createApplicationContext(ApplicationInfo application,
        int flags) throws PackageManager.NameNotFoundException {
    return mBase.createApplicationContext(application, flags);
}

/** @hide */
@Override
public int getUserId() {
    return mBase.getUserId();
}

@Override
public Context createConfigurationContext(Configuration overrideConfiguration) {
    return mBase.createConfigurationContext(overrideConfiguration);
}

@Override
public Context createDisplayContext(Display display) {
    return mBase.createDisplayContext(display);
}

@Override
public boolean isRestricted() {
    return mBase.isRestricted();
}

/** @hide */
@Override
public DisplayAdjustments getDisplayAdjustments(int displayId) {
    return mBase.getDisplayAdjustments(displayId);
}

1 个答案:

答案 0 :(得分:0)

您在DrawingBoard.class中遇到问题 @line GPSTracking gps = new GPSTracking(this);

您正在加载活动之前初始化GPSTracking类,因此当时您的活动上下文引用this为空。

尝试在onCreate()中初始化GPSTracking。