0
時,startActivity會引發錯誤PS:我嘗試了各種給定類型的解決方案,但它們都不適用於我。嘗試啓動Settings.ACTION_LOCATION_SOURCE_SETTINGS
我已經配置這樣的GPSTracker類:
public class GPSTracker extends Service implements LocationListener {
private final Context mContext;
...
public GPSTracker(Context context) {
this.mContext = context;
getLocation();
}
}
這getLocation()
將立即調用。現在我遇到的問題是在一個叫做showSettingsAlert()
功能在同一個類中實現這樣的:
public void showSettingsAlert(){
new MaterialDialog.Builder(mContext)
.content("GPS Needs to be enabled to view Weather Data of your Location")
.title("Enable GPS")
.positiveText("ENABLE")
.onPositive(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
if (intent != null)
startActivity(intent);
else
Log.i("Null" , "Intent");
}
})
.negativeText("CANCEL")
.onNegative(new MaterialDialog.SingleButtonCallback() {
@Override
public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
dialog.dismiss();
}
})
.show();
}
當顯示該對話框,當我點擊ENABLE,我得到以下轉儲:
04-15 16:59:12.288 3982-3982/com.a5corp.weather E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.a5corp.weather, PID: 3982
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.content.Context.startActivity(android.content.Intent)' on a null object reference
at android.content.ContextWrapper.startActivity(ContextWrapper.java:356)
at com.a5corp.weather.permissions.GPSTracker$2.onClick(GPSTracker.java:166)
at com.afollestad.materialdialogs.MaterialDialog.onClick(MaterialDialog.java:361)
at android.view.View.performClick(View.java:5637)
at android.view.View$PerformClick.run(View.java:22429)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6169)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778)
我的猜測是你的'GPSTracker'是基於[這個'GPSTracker'](http://www.androidhive.info/2012/07/android-gps-location-manager-tutorial/) 。其中許多缺陷是,這不是一項真正的服務。這段代碼的作者選擇創建一個擴展'Service'的類,但沒有正確實現或使用該服務。這是什麼導致你的'NullPointerException',因爲這不是一個正確初始化'上下文'。請參閱[本答案](https://stackoverflow.com/a/43082164/115145)瞭解如何在沒有此代碼的情況下查找位置。 – CommonsWare
的確是這樣的......我在我的主文件夾中刪除.gradle文件夾並重建項目 – Sparker0i
後修復了此問題。上下文正常傳遞,否則當位置打開時,將不會報告正確的位置值 – Sparker0i