【问题标题】:Runtime errors when method is invoked?调用方法时出现运行时错误?
【发布时间】:2015-07-21 05:27:38
【问题描述】:

我在运行我的方法时遇到了一些问题。 我怎样才能让它工作,以便我的模拟位置可以在我的实际设备上工作。 (Ps. 我已经包含了权限)。

这提供了一个空指针异常,我不知道为什么?

方法:

 private void setMockLocation() {
        {
            Context context = null;
            LocationManager locationManager = (LocationManager)context.getSystemService( Context.LOCATION_SERVICE );

            Criteria criteria = new Criteria();
            criteria.setAccuracy( Criteria.ACCURACY_COARSE );
            String provider = locationManager.getBestProvider( criteria, true );

            if ( provider == null ) {
                Log.e( TAG, "No location provider found!" );
                return;
            }

            locationManager.getLastKnownLocation(provider);

            Location newLocation = new Location(LocationManager.GPS_PROVIDER);

            newLocation.setLatitude(55.9500);
            newLocation.setLongitude(3.1833);

            newLocation.setAccuracy(500);

            mLocationManager.setTestProviderEnabled
                    (
                            LocationManager.GPS_PROVIDER,
                            true
                    );

            mLocationManager.setTestProviderStatus
                    (
                            LocationManager.GPS_PROVIDER,
                            LocationProvider.AVAILABLE,
                            null,
                            System.currentTimeMillis()
                    );

            mLocationManager.setTestProviderLocation
                    (
                            LocationManager.GPS_PROVIDER,
                            newLocation
                    );
        }
    }

堆栈跟踪:

05-10 18:50:46.218  14398-14398/com.example.ankhit.saveme E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.NullPointerException
            at com.example.ankhit.saveme.UserLocation.setMockLocation(UserLocation.java:220)
            at com.example.ankhit.saveme.UserLocation.access$000(UserLocation.java:42)
            at com.example.ankhit.saveme.UserLocation$4.onClick(UserLocation.java:175)
            at android.view.View.performClick(View.java:4439)
            at android.view.View$PerformClick.run(View.java:18398)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5299)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)

但是,当我将下面的代码添加到上面显示的上下文上下文代码中时,我收到 'GPS Provider Unknown' 错误

LocationManager locationManager = (LocationManager)context.getSystemService( Context.LOCATION_SERVICE );

        Criteria criteria = new Criteria();
        criteria.setAccuracy( Criteria.ACCURACY_COARSE );
        String provider = locationManager.getBestProvider( criteria, true );

        if ( provider == null ) {
            Log.e( TAG, "No location provider found!" );
            return;
        }

        lastLocation = locationManager.getLastKnownLocation(provider);

堆栈跟踪:

05-10 18:54:37.395  15159-15159/com.example.ankhit.saveme E/AndroidRuntime﹕ FATAL EXCEPTION: main
    java.lang.IllegalArgumentException: Provider "gps" unknown
            at android.os.Parcel.readException(Parcel.java:1429)
            at android.os.Parcel.readException(Parcel.java:1379)
            at android.location.ILocationManager$Stub$Proxy.removeTestProvider(ILocationManager.java:956)
            at android.location.LocationManager.removeTestProvider(LocationManager.java:1194)
            at com.example.ankhit.saveme.UserLocation.setMockLocation(UserLocation.java:218)
            at com.example.ankhit.saveme.UserLocation.access$000(UserLocation.java:42)
            at com.example.ankhit.saveme.UserLocation$4.onClick(UserLocation.java:175)
            at android.view.View.performClick(View.java:4439)
            at android.view.View$PerformClick.run(View.java:18398)
            at android.os.Handler.handleCallback(Handler.java:725)
            at android.os.Handler.dispatchMessage(Handler.java:92)
            at android.os.Looper.loop(Looper.java:176)
            at android.app.ActivityThread.main(ActivityThread.java:5299)
            at java.lang.reflect.Method.invokeNative(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:511)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1102)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:869)
            at dalvik.system.NativeStart.main(Native Method)

有什么想法吗?

【问题讨论】:

  • 你能分享你的堆栈跟踪吗?
  • @Mureinik...见上面的编辑。

标签: java android error-handling nullpointerexception gps


【解决方案1】:

NullPointerException 应该来自

 Context context = null;
 LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE );

因为contextnull 并且您在其上调用方法。

【讨论】:

  • 嗯,但是我该如何初始化它呢?如果我做上下文上下文; context.getSystemService 引发错误,因为上下文从未初始化?那么我怎样才能让它工作呢?
  • 如果您在View 中有此代码,那么Context context = this 可以工作。我真的不确定,对Android没有做太多。但我认为 View 实现了 Context。这可能是完全错误的......我只知道,你不能这样做null.invokeThisMethod() ^^
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-20
  • 2023-03-18
  • 1970-01-01
相关资源
最近更新 更多