8

下面的代碼顯示了添加片段的活動的一部分。在oncreateView中的nullpointer異常片段


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 

我無法找出問題.ANY解決方案? 。

編輯: 線22:浮點結果= getArguments()getFloat( 「結果」);

編輯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); 

回答

12

如何解決,你的日誌的線索是Caused by: java.lang.NullPointerException at com.example.iolcalci.Srkt_x.onCreateView(Srkt_x.java:21)

說有一個Null Pointer ExceptionSrkt_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的。

onCreateView末時return view;然後完成getView()將返回nullview值來代替。


如谷歌建議doc看到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; 
} 
+0

謝謝,我現在就接受它。但現在它顯示了第22行的NPE!? – human 2013-03-26 18:40:11

+0

在代碼中看到我的修改,現在您應該在textview中看到'result not included'結果,直到您修復缺少的參數 – madlymad 2013-03-26 18:46:57

+0

的問題什麼可能是沒有獲取參數的錯誤? – human 2013-03-26 18:52:58

3

更換

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

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

而不是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; 
+0

你應該需要幾秒鐘格式化你的答案 – codeMagic 2013-03-26 18:34:40

+0

很抱歉,將做到這一點從現在起:) – 2013-03-26 18:36:13

+1

沒問題,只是有點尖:) – codeMagic 2013-03-26 18:36:48

1

原因您的錯誤和混亂是由於不瞭解how the Android event loop works.

你正在調用getView()這個片段還沒有。片段只有在onCreateView完成運行後纔有視圖。 onCreateView的要點是「讓碎片實例化其用戶界面視圖」。

你應該做getActivity().findViewById

0

試着做你需要在方法onViewCreated()內做的事,你應該重寫。別忘了撥打super()就可以了。