GPS处理中的NumberFormatException

时间:2011-01-21 20:37:29

标签: android

我遇到了一个奇怪的问题。

我正在开发一个定期记录GPS和传感器读数的程序。我的朋友使用Eclipse Galileo 3.6在他的机器上运行代码,它对她来说非常好。

当我在拥有Eclipse Galileo 3.5.2的机器上运行代码时,它显示服务意外停止。

我们有相同的JDK版本。我无法弄清楚可能是什么问题。

请让我知道我需要提供哪些其他信息才能解决问题。

logcat的

    I/ActivityManager( 1104): Start proc com.sensor.test for service com.sensor.test/.SensorReadings: pid=3539 uid=10057 gids={3003, 1015}
D/AndroidRuntime( 3539): Shutting down VM
W/dalvikvm( 3539): threadid=1: thread exiting with uncaught exception (group=0x4001d7e0)
E/AndroidRuntime( 3539): FATAL EXCEPTION: main
E/AndroidRuntime( 3539): java.lang.RuntimeException: Error receiving broadcast Intent { act=android.intent.action.BATTERY_CHANGED flg=0x60000000 (has extras) } in com.sensor.test.SensorReadings$2@44770958
E/AndroidRuntime( 3539):    at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:905)
E/AndroidRuntime( 3539):    at android.os.Handler.handleCallback(Handler.java:587)
E/AndroidRuntime( 3539):    at android.os.Handler.dispatchMessage(Handler.java:92)
E/AndroidRuntime( 3539):    at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 3539):    at android.app.ActivityThread.main(ActivityThread.java:4627)
E/AndroidRuntime( 3539):    at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 3539):    at java.lang.reflect.Method.invoke(Method.java:521)
E/AndroidRuntime( 3539):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
E/AndroidRuntime( 3539):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
E/AndroidRuntime( 3539):    at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 3539): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 3539):    at com.sensor.test.SensorReadings$2.onReceive(SensorReadings.java:327)
E/AndroidRuntime( 3539):    at android.app.ActivityThread$PackageInfo$ReceiverDispatcher$Args.run(ActivityThread.java:892)
E/AndroidRuntime( 3539):    ... 9 more
W/ActivityManager( 1104): Activity destroy timeout for HistoryRecord{44b38508 com.sensor.test/.MainScreen}
D/WifiService( 1104): acquireWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@44963d80}
D/LocationMasfClient( 1104): getNetworkLocation(): Location not found in cache, making network request
D/LocationMasfClient( 1104): getNetworkLocation(): Number of prefetched entries 10
E/LocationMasfClient( 1104): getNetworkLocation(): Returning *server* computed location with accuracy 28
D/libgps  ( 1104): GpsInterface_inject_location( 35.772249, -78.673950, 28.000 )
D/WifiService( 1104): releaseWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@44963d80}
D/WifiService( 1104): acquireWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@44963d80}
D/WifiService( 1104): releaseWifiLockLocked: WifiLock{NetworkLocationProvider type=2 binder=android.os.Binder@44963d80}
D/NativeCrypto( 1104): Freeing OpenSSL session
D/dalvikvm( 1104): GC_FOR_MALLOC freed 22104 objects / 1169312 bytes in 128ms
D/NativeCrypto( 1104): Freeing OpenSSL session
I/Process ( 3539): Sending signal. PID: 3539 SIG: 9
W/InputManagerService( 1104): Window already focused, ignoring focus gain of: com.android.internal.view.IInputMethodClient$Stub$Proxy@44b40dd0
I/ActivityManager( 1104): Process com.sensor.test (pid 3539) has died.

第88行的相关代码,解析正在进行:

public void startService(){
        //startService(new Intent(MainScreen.this,SensorReadings.class));
        Intent intent = new Intent(MainScreen.this, SensorReadings.class);
        **intent.putExtra("lp", Integer.parseInt(""+longPeriod.getText()));// LINE 88**
        intent.putExtra("gp", Integer.parseInt(""+gpsPeriod.getText()));
        intent.putExtra("sp", Integer.parseInt(""+snrPeriod.getText()));
        //startActivity(intent);
        startService(intent);
    }

感谢。 AG

2 个答案:

答案 0 :(得分:1)

E/AndroidRuntime( 2934): java.lang.NumberFormatException: unable to parse '' as integer
E/AndroidRuntime( 2934):    at java.lang.Integer.parseInt(Integer.java:412)
E/AndroidRuntime( 2934):    at java.lang.Integer.parseInt(Integer.java:382)
E/AndroidRuntime( 2934):    at com.sensor.test.MainScreen.startService(MainScreen.java:88)

也许在MainScreen.java的第88行,您的startService方法使用空字符串调用Integer.parseInt

你能告诉我们相关的代码吗?

答案 1 :(得分:0)

我不明白你为什么要放“”。

所以要确保这不是问题,请尝试以下方法:

  • intent.putExtra("lp", Integer.parseInt(longPeriod.getText())); intent.putExtra("gp", Integer.parseInt(gpsPeriod.getText())); intent.putExtra("sp", Integer.parseInt(snrPeriod.getText()));

  • String lp = longPeriod.getText();
    String gp = gpsPeriod.getText();
    String sp = snrPeriod.getText();
    intent.putExtra("lp", Integer.parseInt(lp)); intent.putExtra("gp", Integer.parseInt(gp)); intent.putExtra("sp", Integer.parseInt(sp));

第二种方式更适合调试......所以你可以看到实际发生的事情。