Fragment的oncreateView()中的NullPointerException

时间:2013-03-26 18:22:50

标签: android android-fragments nullpointerexception android-tabhost

下面的代码显示了添加片段的活动的一部分。


    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, srkt_frag);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();

    TabSpec specs1=mTab.newTabSpec("tag1");
    specs1.setContent(R.id.fragment_container);
    specs1.setIndicator("SRK/T");
    mTab.addTab(specs1);

mTab​​是TabHost,其中srkt_frag显示为内容。 片段类如下所示


public class Srkt_x extends Fragment 
{
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            View view=inflater.inflate(R.layout.activity_srkt_x,container,false);
            TextView text = (TextView) getView().findViewById(R.id.srkt_power);
            Float result=getArguments().getFloat("RESULT");
            text.setText(String.valueOf(result));
            return view;

        }

}

执行项目后,我在第21行得到nullpointerexception,即

TextView text = (TextView) getView().findViewById(R.id.srkt_power);

我的xml文件如下所示


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"

tools:context=".Srkt_x" >

<ScrollView
    android:id="@+id/srkt_scrollView"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentTop="true"
    android:background="@color/Black" >

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="433dp" >

        <TextView
            android:id="@+id/srkt_power"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignBottom="@+id/iolpower"
            android:layout_toRightOf="@+id/iolpower"
            android:clickable="false"
            android:ems="10"
            android:enabled="false"
            android:fadingEdge="horizontal"
            android:focusable="false"
            android:focusableInTouchMode="false"
            android:gravity="center|left"
            android:longClickable="false"
            android:paddingTop="10dp"
            android:textColor="@color/DeepSkyBlue"
            android:textSize="15sp" />

        <TextView
            android:id="@+id/iolpower"
            android:layout_width="100dp"
            android:layout_height="30dp"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="20dp"
            android:gravity="bottom|center"
            android:textColor="@color/White"
            android:inputType="text"
            android:text="@string/power"
            android:textSize="20sp"
            android:visibility="visible" />

        <TableLayout
            android:layout_width="228dp"
            android:layout_height="match_parent"
            android:layout_below="@+id/srkt_power"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="33dp"
            android:paddingTop="10dp" >

            <TableRow
                android:id="@+id/srkttableRow1"
                android:layout_height="wrap_content"
                android:background="@color/SkyBlue"
                android:orientation="vertical"
                android:showDividers="middle" >

                <TextView
                    android:id="@+id/iolCol"
                    android:layout_height="wrap_content"
                    android:layout_gravity="left"
                    android:layout_weight="1"
                    android:background="@color/SkyBlue"
                    android:gravity="center"
                    android:text="@string/iol"
                    android:textColor="@color/White"
                    android:textSize="20sp" />

                <TextView
                    android:id="@+id/refCol"
                    android:layout_height="wrap_content"
                    android:layout_gravity="right"
                    android:layout_weight="1"
                    android:background="@color/SkyBlue"
                    android:gravity="center"
                    android:text="@string/refr"
                    android:textColor="@color/White"
                    android:textSize="20sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow2"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd2"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref2"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow3"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd3"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref3"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow4"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd4"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref4"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow5"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd5"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref5"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow6"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd6"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref6"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow7"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd7"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:background="@color/DeepSkyBlue"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref7"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:background="@color/DeepSkyBlue"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow8"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd8"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref8"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow9"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd9"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref9"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow10"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd10"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref10"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow11"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd11"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref11"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>

            <TableRow
                android:id="@+id/srkttableRow12"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:background="@color/Black" >

                <TextView
                    android:id="@+id/srktrnd12"
                    android:layout_gravity="left|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />

                <TextView
                    android:id="@+id/srktref12"
                    android:layout_gravity="right|center"
                    android:layout_weight="1"
                    android:gravity="center"
                    android:textColor="@color/White"
                    android:textSize="15sp" />
            </TableRow>
        </TableLayout>

    </RelativeLayout>
</ScrollView>


日志文件如下所示


   03-26 23:49:22.333: D/AndroidRuntime(497): Shutting down VM
03-26 23:49:22.333: W/dalvikvm(497): threadid=1: thread exiting with uncaught exception (group=0x40015560)
03-26 23:49:22.353: E/AndroidRuntime(497): FATAL EXCEPTION: main
03-26 23:49:22.353: E/AndroidRuntime(497): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.iolcalci/com.example.iolcalci.Menu}: java.lang.NullPointerException
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.ActivityThread.access$1500(ActivityThread.java:117)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.os.Looper.loop(Looper.java:123)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.ActivityThread.main(ActivityThread.java:3683)
03-26 23:49:22.353: E/AndroidRuntime(497):  at java.lang.reflect.Method.invokeNative(Native Method)
03-26 23:49:22.353: E/AndroidRuntime(497):  at java.lang.reflect.Method.invoke(Method.java:507)
03-26 23:49:22.353: E/AndroidRuntime(497):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
03-26 23:49:22.353: E/AndroidRuntime(497):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
03-26 23:49:22.353: E/AndroidRuntime(497):  at dalvik.system.NativeStart.main(Native Method)
03-26 23:49:22.353: E/AndroidRuntime(497): Caused by: java.lang.NullPointerException
03-26 23:49:22.353: E/AndroidRuntime(497):  at com.example.iolcalci.Srkt_x.onCreateView(Srkt_x.java:21)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.support.v4.app.Fragment.performCreateView(Fragment.java:1460)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1088)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1444)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:551)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1129)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.Activity.performStart(Activity.java:3791)
03-26 23:49:22.353: E/AndroidRuntime(497):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1620)
03-26 23:49:22.353: E/AndroidRuntime(497):  ... 11 more

我无法弄清楚问题。有什么解决方案吗?

编辑: 第22行:Float结果= getArguments()。getFloat(“RESULT”);

编辑2:设置参数如下所示:

IOLPower_srkt=Srkt();

                Bundle srkt_bundle=new Bundle();
                srkt_bundle.putFloat("RESULT", IOLPower_srkt);

                srkt_frag.setArguments(srkt_bundle);

这里Srkt()返回浮点值 检查详细代码


IOLPower_srkt=Srkt();
            Bundle srkt_bundle=new Bundle();
            srkt_bundle.putFloat("RESULT", IOLPower_srkt);
            srkt_frag.setArguments(srkt_bundle);



            IOLPower_bink=Binkhorst();
            Bundle bink_bundle=new Bundle();
            bink_bundle.putFloat("RESULT", IOLPower_bink);
            bink_frag.setArguments(bink_bundle);


            IOLPower_srk2=Srk2();
            if((Math.ceil(IOLPower_srk2)-IOLPower_srk2)>0.5){
                srk2_rnd=(float) Math.floor(IOLPower_srk2);
            }else{
                srk2_rnd=(float) Math.ceil(IOLPower_srk2);
            }
            Bundle srk2_bundle=new Bundle();
            srk2_bundle.putFloat("RESULT", srk2_rnd);
            srk2_frag.setArguments(srk2_bundle);



            IOLPower_holl=Holladay();
            Bundle holl_bundle=new Bundle();
            holl_bundle.putFloat("RESULT", IOLPower_holl);
            holl_frag.setArguments(holl_bundle);

        }
            });

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    ft.replace(R.id.fragment_container, srkt_frag);
    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
    ft.commit();

    TabSpec specs1=mTab.newTabSpec("tag1");
    specs1.setContent(R.id.fragment_container);
    specs1.setIndicator("SRK/T");
    mTab.addTab(specs1);


    TabSpec specs2=mTab.newTabSpec("tag2");
    specs2.setContent(R.id.fragment_container);
    specs2.setIndicator("SRK II");
    mTab.addTab(specs2);


    TabSpec specs3=mTab.newTabSpec("tag3");
    specs3.setContent(R.id.fragment_container);
    specs3.setIndicator("HOLLADAY");
    mTab.addTab(specs3);


    TabSpec specs4=mTab.newTabSpec("tag4");
    specs4.setContent(R.id.fragment_container);
    specs4.setIndicator("BINKHORST");
    mTab.addTab(specs4);

5 个答案:

答案 0 :(得分:12)

如何解决:日志的线索是Caused by: java.lang.NullPointerException at com.example.iolcalci.Srkt_x.onCreateView(Srkt_x.java:21)

表示在Null Pointer Exception处有一个Srkt_x.java line 21所以请转到第21行,看看哪个值等于null并抛出异常。

您的代码存在问题,TextView text = (TextView) getView().findViewById(R.id.srkt_power);其中getView()null,因为尚未创建。

正确的代码是:

public class Srkt_x extends Fragment 
{
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View view=inflater.inflate(R.layout.activity_srkt_x,container,false);

        // use view instead of getView()
        TextView text = (TextView) view.findViewById(R.id.srkt_power);
        if(getArguments() != null) {
            Float result=getArguments().getFloat("RESULT");
            text.setText(String.valueOf(result));
        } else {
            text.setText("result not included");
        }
        return view;

    }

}

你必须使用膨胀的视图才能通过id获得想要的TextView。

执行onCreateViewreturn view;结束时,getView()将返回view值,而不是null


根据Fragment的Android文档页面中的建议,请参阅TitlesFragmentDetailsFragment,使用类似下面的代码来设置参数

public static Srkt_x newInstance(Float result) {
    Srkt_x f = new Srkt_x ();

    // Supply index input as an argument.
    Bundle args = new Bundle();
    args.putFloat("RESULT", result);
    f.setArguments(args);

    return f;
}

答案 1 :(得分:5)

而不是getView()使用您刚刚膨胀的视图,因为视图尚未返回,您将获得NPE 也许是这样的:

View view=inflater.inflate(R.layout.activity_srkt_x,container,false);
TextView text = (TextView) view.findViewById(R.id.srkt_power);

//*** do something***

return view;

答案 2 :(得分:3)

替换

TextView text = (TextView) getView().findViewById(R.id.srkt_power);

TextView text = (TextView) getActivity().findViewById(R.id.srkt_power);

答案 3 :(得分:1)

您的错误和混淆的原因是由于不理解how the Android event loop works.

当片段还没有片段时,您正在调用getView()。该片段仅在onCreateView完成运行后才有视图。 onCreateView的要点是“让片段实例化其用户界面视图”。

你应该getActivity().findViewById

答案 4 :(得分:0)

尝试在您应该覆盖的方法onViewCreated()中执行您需要执行的操作。别忘了给它打电话super()