My app (a GPS dashboard) was running fine on both Android (device) and iOS Simulator until I had the "great" idea of updating everything to 3.0.x. The moment I did it, nothing else is working anymore due issues with the geolocation plugin.
Fact is, it is not updating the coordinates on Android (or even worse, crashing). See the sample below:
page.xml
<Page xmlns="http://schemas.nativescript.org/tns.xsd" class="page" loaded="pageLoaded">
<StackLayout class="p-20">
<Label text="Coordinates" class="h2 text-center" textWrap="true"/>
<Label text="{{ message }}" class="h2 text-center" textWrap="true" id="messageText"/>
</StackLayout>
</Page>
var observable = require("data/observable");
var pageModule = require("ui/page");
var viewModel = new observable.Observable();
var geolocation = require("nativescript-geolocation");
var messageText
var loca
exports.pageLoaded = function(args) {
page = args.object;
messageText = page.getViewById("messageText");
page.bindingContext = { message:loca};
}
if (!geolocation.isEnabled()) {
geolocation.enableLocationRequest();
}
watchId = geolocation.watchLocation(
function (loc) {
if (loc) {
console.log("Received location: " + loc);
loca = loc
messageText.text = loca.latitude+", "+loca.longitude
}
},
function(e){
console.log("Error: " + e.message);
},
{desiredAccuracy: 3, updateDistance: 10, minimumUpdateTime : 1000 * 1});
An uncaught Exception occurred on "main" thread.
java.lang.RuntimeException: Unable to start activity ComponentInfo{org.nativescript.geoLocationTest/com.tns.NativeScriptActivity}: com.tns.NativeScriptException:
Calling js method onCreate failed
Error calling module function
Error: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:453)
com.tns.Runtime.callJSMethodNative(Native Method)
com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1021)
com.tns.Runtime.callJSMethodImpl(Runtime.java:903)
com.tns.Runtime.callJSMethod(Runtime.java:890)
com.tns.Runtime.callJSMethod(Runtime.java:874)
com.tns.Runtime.callJSMethod(Runtime.java:866)
com.tns.NativeScriptActivity.onCreate(NativeScriptActivity.java:13)
android.app.Activity.performCreate(Activity.java:6237)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
android.app.ActivityThread.-wrap11(ActivityThread.java)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5417)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
File: "file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js, line: 149, column: 13
StackTrace:
Frame: function:'enableLocationRequestCore', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 149, column: 14
Frame: function:'watchLocation', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 168, column: 9
Frame: function:'', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/main-page.js', line: 23, column: 23
Frame: function:'require', file:'', line: 1, column: 266
Frame: function:'global.loadModule', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/globals/globals.js', line: 30, column: 31
Frame: function:'resolvePageFromEntry', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 95, column: 40
Frame: function:'FrameBase.navigate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 177, column: 20
Frame: function:'ActivityCallbacksImplementation.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame.js', line: 678, column: 19
Frame: function:'NativeScriptActivity.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/activity.js', line: 16, column: 25
Error: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:453)
com.tns.Runtime.callJSMethodNative(Native Method)
com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1021)
com.tns.Runtime.callJSMethodImpl(Runtime.java:903)
com.tns.Runtime.callJSMethod(Runtime.java:890)
com.tns.Runtime.callJSMethod(Runtime.java:874)
com.tns.Runtime.callJSMethod(Runtime.java:866)
com.tns.NativeScriptActivity.onCreate(NativeScriptActivity.java:13)
android.app.Activity.performCreate(Activity.java:6237)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
android.app.ActivityThread.-wrap11(ActivityThread.java)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5417)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
File: "<unknown>, line: 1, column: 265
StackTrace:
Frame: function:'enableLocationRequestCore', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 149, column: 14
Frame: function:'watchLocation', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 168, column: 9
Frame: function:'', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/main-page.js', line: 23, column: 23
Frame: function:'require', file:'', line: 1, column: 266
Frame: function:'global.loadModule', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/globals/globals.js', line: 30, column: 31
Frame: function:'resolvePageFromEntry', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 95, column: 40
Frame: function:'FrameBase.navigate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 177, column: 20
Frame: function:'ActivityCallbacksImplementation.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame.js', line: 678, column: 19
Frame: function:'NativeScriptActivity.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/activity.js', line: 16, column: 25
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2416)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
at android.app.ActivityThread.-wrap11(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: com.tns.NativeScriptException:
Calling js method onCreate failed
Error calling module function
Error: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:453)
com.tns.Runtime.callJSMethodNative(Native Method)
com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1021)
com.tns.Runtime.callJSMethodImpl(Runtime.java:903)
com.tns.Runtime.callJSMethod(Runtime.java:890)
com.tns.Runtime.callJSMethod(Runtime.java:874)
com.tns.Runtime.callJSMethod(Runtime.java:866)
com.tns.NativeScriptActivity.onCreate(NativeScriptActivity.java:13)
android.app.Activity.performCreate(Activity.java:6237)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
android.app.ActivityThread.-wrap11(ActivityThread.java)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5417)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
File: "file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js, line: 149, column: 13
StackTrace:
Frame: function:'enableLocationRequestCore', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 149, column: 14
Frame: function:'watchLocation', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 168, column: 9
Frame: function:'', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/main-page.js', line: 23, column: 23
Frame: function:'require', file:'', line: 1, column: 266
Frame: function:'global.loadModule', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/globals/globals.js', line: 30, column: 31
Frame: function:'resolvePageFromEntry', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 95, column: 40
Frame: function:'FrameBase.navigate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 177, column: 20
Frame: function:'ActivityCallbacksImplementation.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame.js', line: 678, column: 19
Frame: function:'NativeScriptActivity.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/activity.js', line: 16, column: 25
Error: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:453)
com.tns.Runtime.callJSMethodNative(Native Method)
com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1021)
com.tns.Runtime.callJSMethodImpl(Runtime.java:903)
com.tns.Runtime.callJSMethod(Runtime.java:890)
com.tns.Runtime.callJSMethod(Runtime.java:874)
com.tns.Runtime.callJSMethod(Runtime.java:866)
com.tns.NativeScriptActivity.onCreate(NativeScriptActivity.java:13)
android.app.Activity.performCreate(Activity.java:6237)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2476)
android.app.ActivityThread.-wrap11(ActivityThread.java)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1344)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:148)
android.app.ActivityThread.main(ActivityThread.java:5417)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
File: "<unknown>, line: 1, column: 265
StackTrace:
Frame: function:'enableLocationRequestCore', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 149, column: 14
Frame: function:'watchLocation', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/nativescript-geolocation/nativescript-geolocation.js', line: 168, column: 9
Frame: function:'', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/main-page.js', line: 23, column: 23
Frame: function:'require', file:'', line: 1, column: 266
Frame: function:'global.loadModule', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/globals/globals.js', line: 30, column: 31
Frame: function:'resolvePageFromEntry', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 95, column: 40
Frame: function:'FrameBase.navigate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame-common.js', line: 177, column: 20
Frame: function:'ActivityCallbacksImplementation.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/frame.js', line: 678, column: 19
Frame: function:'NativeScriptActivity.onCreate', file:'file:///data/data/org.nativescript.geoLocationTest/files/app/tns_modules/tns-core-modules/ui/frame/activity.js', line: 16, column: 25
at com.tns.Runtime.callJSMethodNative(Native Method)
at com.tns.Runtime.dispatchCallJSMethodNative(Runtime.java:1021)
at com.tns.Runtime.callJSMethodImpl(Runtime.java:903)
at com.tns.Runtime.callJSMethod(Runtime.java:890)
at com.tns.Runtime.callJSMethod(Runtime.java:874)
at com.tns.Runtime.callJSMethod(Runtime.java:866)
at com.tns.NativeScriptActivity.onCreate(NativeScriptActivity.java:13)
at android.app.Activity.performCreate(Activity.java:6237)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1107)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2369)
... 9 more
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.content.Context.checkPermission(java.lang.String, int, int)' on a null object reference
at android.support.v4.content.ContextCompat.checkSelfPermission(ContextCompat.java:453)
... 19 more