1
votes

There is a location manager in cn1 which works just fine for my project. But I need to update location value using jobscheduler every few minutes. I have done jobScheduler using native interface and need gps code in one of its method (onStartJob() method here). So I don't want to code location manager(gps) again in native native android. Hence I used cn1 location provider directly in native interface and it is giving error. Can I mix cn1 in native interface smhow?

public class MyJobService extends JobService {

@Override
    public boolean onStartJob(JobParameters jobParameters) {
        if (Display.isInitialized()) {//updated
           checkGPS();
        }
        Toast.makeText(this,
                "Live track running with jobScheduler",
                Toast.LENGTH_SHORT).show();
        return false;
    }

    @Override
    public boolean onStopJob(JobParameters jobParameters) {
        Toast.makeText(this,
                "Live track running with jobScheduler stops",
                Toast.LENGTH_SHORT).show();
        return false;
    }

    //using cn1 location manager...
    public void checkGPS() {
    LocationManager.getLocationManager().setLocationListener(new LocationListener() {

        @Override
        public void locationUpdated(Location location) {
            loc = location;
            latitude = location.getLatitude();
            longitude = location.getLongitude();
            System.out.println("locationUpdated latitudeeee " + latitude);
            System.out.println("locationUpdated longitudeeee " + longitude);
        }

        @Override
        public void providerStateChanged(int newState) {
            System.out.println("newState " + newState);
        }
    });
    }
}

Error log:

09-11 10:48:14.980 15455-15455/? E/JobService: Error while executing job: 1
09-11 10:48:14.990 15455-15455/? E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.capitaleyenepal.nokia, PID: 15455
java.lang.RuntimeException: java.lang.NullPointerException: Attempt to invoke virtual method 'com.codename1.location.LocationManager com.codename1.impl.CodenameOneImplementation.getLocationManager()' on a null object reference
   at android.app.job.JobService$JobHandler.handleMessage(JobService.java:130)
   at android.os.Handler.dispatchMessage(Handler.java:102)
   at android.os.Looper.loop(Looper.java:148)
   at android.app.ActivityThread.main(ActivityThread.java:7409)
   at java.lang.reflect.Method.invoke(Native Method)
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'com.codename1.location.LocationManager com.codename1.impl.CodenameOneImplementation.getLocationManager()' on a null object reference
   at com.codename1.ui.Display.getLocationManager(Display.java:3091)
   at com.codename1.location.LocationManager.getLocationManager(LocationManager.java:70)
   at com.capitaleyenepal.nokia.MyJobService.checkGPS(MyJobService.java:56)
   at com.capitaleyenepal.nokia.MyJobService.onStartJob(MyJobService.java:30)
   at android.app.job.JobService$JobHandler.handleMessage(JobService.java:126)
   at android.os.Handler.dispatchMessage(Handler.java:102) 
   at android.os.Looper.loop(Looper.java:148) 
   at android.app.ActivityThread.main(ActivityThread.java:7409) 
   at java.lang.reflect.Method.invoke(Native Method) 
   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 

Update1 : If I remove checkGPS() method which has cn1 codes for location, the jobScheduler works fine.

@Override
public boolean onStartJob(JobParameters jobParameters) {
    if (Display.isInitialized()) {
        checkGPS();
    }
    return false;
}

Error while debugging (app crashes)

10-18 11:33:36.608 2580-2726/? E/ActivityManager: ANR in com.capitaleyenepal.nokia
PID: 15661
Reason: executing service com.capitaleyenepal.nokia/.MyJobService
Load: 0.0 / 0.0 / 0.0
CPU usage from 97817ms to 0ms ago:
5.6% 2580/system_server: 3.6% user + 2% kernel / faults: 8228 minor 44 major
3.2% 1102/mmcqd/0: 0% user + 3.2% kernel
2.1% 3681/com.samsung.android.providers.context: 1.2% user + 0.8% kernel / faults: 2529 minor 397 major
0.9% 1262/mc_fastcall: 0% user + 0.9% kernel
0.5% 22199/com.sec.spp.push:RemoteDlcProcess: 0.3% user + 0.2% kernel / faults: 1906 minor 1027 major
0.9% 3136/com.android.systemui: 0.7% user + 0.1% kernel / faults: 11113 minor 7 major
0.7% 24072/adbd: 0.2% user + 0.5% kernel / faults: 1053 minor
0.5% 16674/logcat: 0.2% user + 0.3% kernel / faults: 17 minor
0.3% 7253/com.android.bluetooth: 0.2% user + 0.1% kernel / faults: 1791 minor
0.3% 4423/com.google.android.gms.persistent: 0.2% user + 0% kernel / faults: 1875 minor
0.3% 2241/jbd2/dm-0-8: 0% user + 0.3% kernel
0.2% 2115/servicemanager: 0.1% user + 0.1% kernel
0.2% 7549/com.samsung.android.sm.provider: 0.1% user + 0% kernel / faults: 768 minor
0.1% 2117/surfaceflinger: 0% user + 0.1% kernel / faults: 127 minor
0.1% 2268/argosd: 0.1% user + 0% kernel
0.1% 3114/com.android.phone: 0.1% user + 0% kernel / faults: 333 minor
0% 2284/fingerprintd: 0% user + 0% kernel / faults: 1234 minor
0.1% 15594/kworker/0:3: 0% user + 0.1% kernel
0.1% 15661/com.capitaleyenepal.nokia: 0.1% user + 0% kernel / faults: 2 minor
0.1% 16390/com.google.android.gms: 0.1% user + 0% kernel / faults: 3539 minor 2 major
0.1% 15207/kworker/1:1: 0% user + 0.1% kernel
0.1% 16358/com.google.android.gms.persistent: 0% user + 0% kernel / faults: 1797 minor
0% 2277/sdp_cryptod: 0% user + 0% kernel / faults: 74 minor
0.1% 3403/android.process.acore: 0% user + 0% kernel / faults: 182 minor
0.1% 12561/cfinteractive0: 0% user + 0.1% kernel
0.1% 7/rcu_preempt: 0% user + 0.1% kernel
0.1% 7424/com.samsung.android.sm: 0% user + 0% kernel / faults: 541 minor
0% 15160/kworker/2:1: 0% user + 0% kernel
0% 7618/com.opera.max.oem: 0% user + 0% kernel / faults: 43 minor
0% 16656/kworker/3:0: 0% user + 0% kernel
0% 2114/lmkd: 0% user + 0% kernel
0% 9858/com.sec.spp.push: 0% user + 0% kernel / faults: 15 minor
0% 1453/dhd_dpc: 0% user + 0% kernel
0% 10/migration/0: 0% user + 0% kernel
0% 13/migration/1: 0% user + 0% kernel
0% 23/migration/3: 0% user + 0% kernel
0% 2086/kworker/0:1H: 0% user + 0% kernel
0% 13720/com.facebook.katana: 0% user + 0% kernel / faults: 426 minor 1 major
0% 16211/com.samsung.cmh:CMH: 0% user + 0% kernel / faults: 38 minor
0% 25159/com.google.android.gms: 0% user + 0% kernel / faults: 2183 minor
0% 18/migration/2: 0% user + 0% kernel
0% 28/migration/4: 0% user + 0% kernel
0% 616/ion_noncontig_h: 0% user + 0% kernel
0% 686/kswapd0: 0% user + 0% kernel
0% 2113/healthd: 0% user + 0% kernel
0% 12378/wpa_supplicant: 0% user + 0% kernel / faults: 1 minor
0% 16576/com.sec.android.daemonapp: 0% user + 0% kernel / faults: 254 minor
0% 17723/com.sec.android.inputmethod: 0% user + 0% kernel / faults: 2743 minor
0% 1//init: 0% user + 0% kernel / faults: 46 minor
0% 30/kworker/4:0: 0% user + 0% kernel
0% 33/migration/5: 0% user + 0% kernel
0% 38/migration/6: 0% user + 0% kernel
0% 1475/ueventd: 0% user + 0% kernel
0% 2122/tee_scheduler: 0% user + 0% kernel
0% 2252/edmaudit: 0% user + 0% kernel
0% 2257/rild: 0% user + 0% kernel / faults: 35 minor
0% 2323/rild: 0% user + 0% kernel / faults: 53 minor
0% 16370/com.google.process.gapps: 0% user + 0% kernel / faults: 31 minor
0% 8/rcu_sched: 0% user + 0% kernel
0% 14/ksoftirqd/1: 0% user + 0% kernel
0% 43/migration/7: 0% user + 0% kernel
0% 870/hwrng: 0% user + 0% kernel
0% 1451/dhd_watchdog_th: 0% user + 0% kernel
0% 2087/kworker/2:1H: 0% user + 0% kernel
0% 2116/mcDriverDaemon: 0% user + 0% kernel / faults: 656 minor
0% 2254/netd: 0% user + 0% kernel / faults: 17 minor
0% 2278/diagexe: 0% user + 0% kernel
0% 2913/tlc_s

checkGps () method

 public void checkGPS() {

  LocationManager.getLocationManager().setLocationListener(new LocationListener() {

    @Override
    public void locationUpdated(Location location) {
        loc = location;
        latitude = location.getLatitude();
        longitude = location.getLongitude();
        System.out.println("locationUpdated latitudeeee " + latitude);
        System.out.println("locationUpdated longitudeeee " + longitude);
    }

    @Override
    public void providerStateChanged(int newState) {
        System.out.println("newState " + newState);
    }
});
}
1

1 Answers

1
votes

This is happening because Codename One isn't running. You need to make sure that the Display class is initialized using code such as:

if(Display.isInitialized()) {
    ...
}

If it's not you can try calling init and pass your context object, I would advise against it if possible as there are some nuances. I suggest looking at the AndroidImplementation.java file if you choose to follow that path.