2016-08-17 11 views
0

MainActivityレイアウトにframelayoutとLinearLayoutがあります。線図は7枚の画像で構成されています。私はそれらの画像をクリックすると断片を変更しています。断片の1つでは、私はjsonから値を取得し、2つのスピナーにそれらを追加します。私がこの断片から他の断片に断片を変えるのは初めてですが、うまくいきます。しかし、私がこのフラグメントに2回目に戻り、フラグメントを変更すると、アプリケーションは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がnullではありませんアプリが開くと最初の断片になります。 – Monojit

+0

あなたは 'R.layout.activity_main'を含めてください。 – apelsoczi

+0

'FragmentTwo'の行番号81と64の行はどれですか? – PPartisan

答えて

0

あなたのコードでは、もう少しを見た後、私はあなたの問題の核心は、getActivity()戻りREPONSEが配信されるnullことであることを確信しています。これは、フラグメントがあなたのアクティビティにもう接続されていない(つまり、別のフラグメントでreplaceと呼ばれている)ためです。

それは前に(私はそれがあなたの機能のための任意の望ましくない結果を持っているかどうかはわかりませんが)setAdapterを呼び出すにnullをチェックするために、おそらく最善です:

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

それは男でした。今はクラッシュしない。本当にありがとう! @ TR4Android – Monojit

関連する問題