简体   繁体   English

低功耗蓝牙-java.lang.NullPointerException

[英]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. 因此,在过去的几个小时中,我一直在为此苦苦挣扎,一直在搜索SO,直到我认为自己找不到解决问题的方法。 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 基本上,我试图在Fragment扩展内使用Context,这给了我一些错误,我将完整的代码粘贴到了这里

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. 根据我的发现,当Context为null时,这听起来像是这种情况,但我不知道如何解决。

LogCat: 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. 失败的特定行,使用mContext时发生错误。

@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. 您尚未初始化mContext ,它为null。 Invoking a method on null reference causes the NPE. 在空引用上调用方法会导致NPE。

In a fragment, use getActivity() to get a reference to the hosting activity that can be used as a Context . 在一个片段中,使用getActivity()获取对可用作Context的托管活动的引用。 (Caveat: Only when attached to an activity. Works in onCreate() which comes after onAttach() .) (警告:只有当附加到活动工程在onCreate()其配备后onAttach()

So, replace 因此,更换

mContext.getSystemService()

with

getActivity().getSystemService()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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