2016-08-17 86 views
0

我在MainActivity佈局中有一個framelayout和一個LinearLayout。線性佈局由7個圖像組成。點擊這些圖片時,我正在改變片段。在一個片段中,我從json獲取值並將它們添加到2個spinners中。我第一次將這個片段中的片段更改爲任何其他片段都可以正常工作。但是當我第二次回到這個片段,然後改變片段時,這個應用程序就會與NPE一起崩潰。有什麼我在我的MainActivity中做錯了嗎?FragmentTransaction中的NullPointerException

logcat的:

FATAL EXCEPTION: main 
Process: com.rishta.rishtabliss, PID: 26506 
java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object android.content.Context.getSystemService(java.lang.String)' on a null object reference 
at android.view.LayoutInflater.from(LayoutInflater.java:228) 
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:178) 
at android.widget.ArrayAdapter.<init>(ArrayAdapter.java:163) 
at com.rishta.rishtabliss.fragment.FragmentTwo$1.onResponse(FragmentTwo.java:81) 
at com.rishta.rishtabliss.fragment.FragmentTwo$1.onResponse(FragmentTwo.java:64) 
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:60) 
at com.android.volley.toolbox.StringRequest.deliverResponse(StringRequest.java:30) 
at com.android.volley.ExecutorDelivery$ResponseDeliveryRunnable.run(ExecutorDelivery.java:99) 
at android.os.Handler.handleCallback(Handler.java:746) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:148) 
at android.app.ActivityThread.main(ActivityThread.java:5443) 
at java.lang.reflect.Method.invoke(Native Method) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:728) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?> 
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:app="http://schemas.android.com/apk/res-auto" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/main_content" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:fitsSystemWindows="true" 
     tools:context=".activity.MainActivity"> 

     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical"> 

      <LinearLayout 
       android:id="@+id/llfooter" 
       android:background="#ffffff" 
       android:layout_alignParentBottom="true" 
       android:orientation="horizontal" 
       android:layout_width="match_parent" 
       android:layout_height="45dp"> 

       <ImageView 
        android:id="@+id/img1" 
        android:layout_weight="1" 
        android:src="@drawable/number_one" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:onClick="selectFrag"/> 
       <ImageView 
        android:id="@+id/img2" 
        android:layout_weight="1" 
        android:src="@drawable/number_two" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:onClick="selectFrag"/> 
       <ImageView 
        android:id="@+id/img3" 
        android:layout_weight="1" 
        android:src="@drawable/number_three" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:onClick="selectFrag"/> 
       <ImageView 
        android:id="@+id/img4" 
        android:layout_weight="1" 
        android:src="@drawable/number_four" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:onClick="selectFrag"/> 
       <ImageView 
        android:id="@+id/img5" 
        android:layout_weight="1" 
        android:src="@drawable/number_five" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:onClick="selectFrag"/> 
       <ImageView 
        android:id="@+id/img6" 
        android:layout_weight="1" 
        android:src="@drawable/number_six" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:onClick="selectFrag"/> 
       <ImageView 
        android:id="@+id/img7" 
        android:layout_weight="1" 
        android:src="@drawable/number_seven" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:onClick="selectFrag"/> 

      </LinearLayout> 

      <FrameLayout 
       android:id="@+id/frame_main" 
       android:layout_width="match_parent" 
       android:layout_height="match_parent" 
       android:layout_alignParentTop="true" 
       android:layout_above="@+id/llfooter" /> 

     </RelativeLayout> 
    </android.support.design.widget.CoordinatorLayout> 

主要活動:

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     if (findViewById(R.id.frame_main) != null) { 
      if (savedInstanceState != null) { 
       return; 
      } 

      FragmentOne firstFragment = new FragmentOne(); 
      getSupportFragmentManager().beginTransaction().add(R.id.frame_main, firstFragment).commit(); 
     } 


    } //End OnCreate Method 


    public void selectFrag(View view) { 
     FragmentManager fm = getSupportFragmentManager(); 

     Fragment currentFragment = fm.findFragmentById(R.id.frame_main); 
     Fragment newFragment = null; 

     switch (view.getId()) { 
      case R.id.img1: 
       if (currentFragment instanceof FragmentOne) { 
        return; 
       } 
       newFragment = new FragmentOne(); 
       break; 
      case R.id.img2: 
       if (currentFragment instanceof FragmentTwo) { 
        return; 
       } 
       newFragment = new FragmentTwo(); 
       break; 
      case R.id.img3: 
       if (currentFragment instanceof FragmentThree) { 
        return; 
       } 
       newFragment = new FragmentThree(); 
       break; 
      case R.id.img4: 
       if (currentFragment instanceof FragmentFour) { 
        return; 
       } 
       newFragment = new FragmentFour(); 
       break; 
      case R.id.img5: 
       if (currentFragment instanceof FragmentFive) { 
        return; 
       } 
       newFragment = new FragmentFive(); 
       break; 
      case R.id.img6: 
       if (currentFragment instanceof FragmentSix) { 
        return; 
       } 
       newFragment = new FragmentSix(); 
       break; 
      case R.id.img7: 
       if (currentFragment instanceof FragmentSeven) { 
        return; 
       } 
       newFragment = new FragmentSeven(); 
       break; 
     } 

     FragmentTransaction fragmentTransaction = fm.beginTransaction(); 
     fragmentTransaction.replace(R.id.frame_main, newFragment); 
     fragmentTransaction.commit(); 
    } 


} 

片段:

public class FragmentTwo extends Fragment { 

     private Spinner religion, subreligion, mtoungue; 
     private List<String> religionlist; 

     @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
      return inflater.inflate(R.layout.fragment_two, container, false); 

     } 

     @Override 
     public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
      super.onViewCreated(view, savedInstanceState); 

      religion = (Spinner)view.findViewById(R.id.spinner_religion); 
      fetchlist(); 

     } 

     private void fetchlist() { 

      StringRequest stringRequest = new StringRequest(Request.Method.GET, URLUtils.SIGNUP_COTAIN_URL, new Response.Listener<String>() { 

       @Override 
       public void onResponse(String response) { 
        Log.e("ResponceFragmentTwo","***********************"+response); 
        try { 


         religionlist = new ArrayList<String>(); 

         JSONObject jo = new JSONObject(response); 
         JSONArray arr = jo.getJSONArray("all_religion"); 
         for (int i = 0; i < arr.length(); i++) { 
          JSONObject obj = arr.getJSONObject(i); 
          religionlist.add(obj.getString("name")); 
         } 

         religion.setAdapter(new ArrayAdapter<String>(getActivity(), R.layout.spinner_item, religionlist)); 



        } catch (JSONException e) { 
         // TODO Auto-generated catch block 
         e.printStackTrace(); 
        } 

       } 
      }, new Response.ErrorListener() { 
       @Override 
       public void onErrorResponse(VolleyError error) { 
        Toast.makeText(getActivity(), "VolleyError" + error.toString(), Toast.LENGTH_LONG).show(); 
       } 


      }) { 



      }; 

      RequestQueue requestQueue = Volley.newRequestQueue(getActivity()); 
      requestQueue.add(stringRequest); 

     } 


    } 
+0

沒有,firstFragment不爲空,因爲我得到了應用程序打開時的第一個片段。 – Monojit

+0

請你可以包括'R.layout.activity_main'。 – apelsoczi

+0

「FragmentTwo」中哪些行是81和64行? – PPartisan

回答

0

你的代碼看多一點後,我敢肯定,你的問題的核心是,getActivity()回報null當效應初探交付。很有可能是因爲該片段不再附加到您的活動中(即,您已使用另一個片段調用replace)。

這也可能是最好檢查有無null調用setAdapter(雖然我不知道是否有你的功能的任何不良的後果)之前:

if (getActivity() != null) { 
    religion.setAdapter(new ArrayAdapter<String>(getActivity(), R.layout.spinner_item, religionlist)); 
} 
+0

那做的人。現在它沒有崩潰。非常感謝! @ TR4Android – Monojit

相關問題