简体   繁体   中英

Bluetooth Low Energy - java.lang.NullPointerException

So I've been struggling with this for the past few hours and searching SO before I don't think I can find a way to sovle my problem. Basically I'm trying to use Context inside of the Fragment extension and it's giving me errors I've pasted the full code here in this gist

enter link description here

From what I found on SO it sounds like this happens when there is null for Context, but I don't understand how to fix it.

LogCat:

> 06-18 10:20:08.972    5718-5718/com.aparosecurity.kblock W/dalvikvm﹕
> threadid=1: thread exiting with uncaught exception (group=0x41625898)
> 06-18 10:20:08.992    5718-5718/com.aparosecurity.kblock
> E/AndroidRuntime﹕ FATAL EXCEPTION: main
>     java.lang.NullPointerException
>             at com.aparosecurity.kblock.ImageFragment.onCreate(ImageFragment.java:77)
>             at android.support.v4.app.Fragment.performCreate(Fragment.java:1477)
>             at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:904)
>             at android.support.v4.app.FragmentManagerImpl.performPendingDeferredStart(FragmentManager.java:834)
>             at android.support.v4.app.Fragment.setUserVisibleHint(Fragment.java:841)
>             at android.support.v4.app.FragmentPagerAdapter.setPrimaryItem(FragmentPagerAdapter.java:130)
>             at android.support.v4.view.ViewPager.populate(ViewPager.java:1066)
>             at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
>             at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
>             at android.view.View.measure(View.java:15848)
>             at android.widget.LinearLayout.measureVertical(LinearLayout.java:847)
>             at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
>             at android.view.View.measure(View.java:15848)
>             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
>             at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
>             at android.view.View.measure(View.java:15848)
>             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
>             at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1404)
>             at android.widget.LinearLayout.measureVertical(LinearLayout.java:695)
>             at android.widget.LinearLayout.onMeasure(LinearLayout.java:588)
>             at android.view.View.measure(View.java:15848)
>             at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5012)
>             at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
>             at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2189)
>             at android.view.View.measure(View.java:15848)
>             at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:1905)
>             at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1104)
>             at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1284)
>             at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1004)
>             at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:5481)
>             at android.view.Choreographer$CallbackRecord.run(Choreographer.java:749)
>             at android.view.Choreographer.doCallbacks(Choreographer.java:562)
>             at android.view.Choreographer.doFrame(Choreographer.java:532)
>             at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:735)
>             at android.os.Handler.handleCallback(Handler.java:730)
>             at android.os.Handler.dispatchMessage(Handler.java:92)
>             at android.os.Looper.loop(Looper.java:137)
>             at android.app.ActivityThread.main(ActivityThread.java:5136)
>             at java.lang.reflect.Method.invokeNative(Native Method)
>             at java.lang.reflect.Method.invoke(Method.java:525)
>             at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
>             at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
>             at dalvik.system.NativeStart.main(Native Method)

Any help is appreciated.

The specific lines which are failing, the error occurs when mContext is used.

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    fragVal = getArguments() != null ? getArguments().getInt("val") : 1;
    mHandler = new Handler();

    // Initializes a Bluetooth adapter.  For API level 18 and above, get a reference to
    // BluetoothAdapter through BluetoothManager.
    final BluetoothManager bluetoothManager =
            (BluetoothManager) mContext.getSystemService(Context.BLUETOOTH_SERVICE);
    mBluetoothAdapter = bluetoothManager.getAdapter();

}

You have not initialized mContext and it is null. Invoking a method on null reference causes the NPE.

In a fragment, use getActivity() to get a reference to the hosting activity that can be used as a Context . (Caveat: Only when attached to an activity. Works in onCreate() which comes after onAttach() .)

So, replace

mContext.getSystemService()

with

getActivity().getSystemService()

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM