1

我正在尝试将我的应用程序转换为服务,以便它不能轻易被破坏并保持运行。我已经多次移动代码试图找出正确的位置以便于使用,但现在我明白了

java.lang.NullPointerException:尝试在空对象引用上调用接口方法“android.os.Looper com.google.android.gms.common.api.GoogleApiClient.getLooper()”

它发生在这个代码块中:

public void initiateMockLocs() {
    Location mockLoc = new Location(LocationManager.NETWORK_PROVIDER);
    mockLoc.setLatitude(41.881832);
    mockLoc.setLongitude(-87.623177);
    mockLoc.setAccuracy(20);
    mockLoc.setTime(System.currentTimeMillis());
    mockLoc.setElapsedRealtimeNanos(System.nanoTime());

    try {
        LocationServices.FusedLocationApi.setMockMode(mMainActivity.mGoogleApiClient, true);
        LocationServices.FusedLocationApi.setMockLocation(mMainActivity.mGoogleApiClient, mockLoc);

        Location loc = LocationServices.FusedLocationApi.getLastLocation(mMainActivity.mGoogleApiClient);
        Log.i("Mock Location: ", loc.toString());

        Log.i("Timer", "Going to start timer.");
        logLocation();
        startTimer();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

具体来说,在“try”块下的第一行。该函数是该服务的 onCreate 中唯一调用的东西,因此在那里调用它。mGoogleApiClient 初始化的其他一些背景信息是:

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    getSupportActionBar().setDisplayShowTitleEnabled(true);

    createLocationRequest();
    buildGoogleApiClient();
    mGoogleApiClient.connect();

    showProcesses = (Button) findViewById(R.id.listApps);
    showProcesses.setOnClickListener(listRunningApps);

    activateMockLocs = (Button) findViewById(R.id.activateMock);
    activateMockLocs.setOnClickListener(activateMockLocations);

    latView = (TextView) findViewById(R.id.latView);
    longView = (TextView) findViewById(R.id.longView);

    anonymizationService = new AnonymizationService();
}

protected synchronized void buildGoogleApiClient() {
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();
}
// Initialize a LocationRequest object
protected void createLocationRequest() {
    mLocationRequest = new LocationRequest();
    mLocationRequest.setInterval(10000);
    mLocationRequest.setFastestInterval(10000);
    mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);
}

如果有人知道让 MainActivity 与 Service 对话并解决此问题的正确方法,那就太好了!我似乎找不到解决我确切问题的答案。先感谢您。

4

0 回答 0