2017-09-07 12 views
-1

newInstace()に保存されたsavedInstanceStateの詳細を取得しようとしており、これをonCreateView()にフェッチする必要があります。保存された状態が無効になる

問題: - 詳細を取得しようとすると、excpetionがスローされます。

java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.String android.os.Bundle.getString(java.lang.String)' on a null object reference 

私はなぜsavedInstanceStatenullifiedまたはGCedを取得して識別することができません。

亡命コード: -

public class FeedDetailsFragment extends Fragment { 


    public static final String TAG = FeedDetailsFragment.class.getSimpleName(); 
    private static String KEY_NAME="1"; 
    private static String KEY_TEXT="2"; 
    private static String KEY_IMAGEURL="3"; 
    private static String KEY_TITLE="4"; 
    private static String KEY_TIME="5"; 
    private static String KEY_DESC="6"; 

    public static FeedDetailsFragment newInstance(DataModel data){ 
     FeedDetailsFragment detailsFragment=new FeedDetailsFragment(); 
     Log.d(TAG, "Is Data Null? " + ((data == null) ? "Yes" : "No") + " For example: name is " + data.getName()); 
     Bundle bundle=new Bundle(); 
     bundle.putString(KEY_NAME,data.getName()); 
     bundle.putString(KEY_TEXT,data.getText()); 
     bundle.putString(KEY_IMAGEURL,data.getImageUrl()); 
     bundle.putString(KEY_TITLE,data.getTitle()); 
     bundle.putLong(KEY_TIME,data.getTime()); 
     bundle.putString(KEY_DESC,data.getDescription()); 
     detailsFragment.setArguments(bundle); 
     fragtag.put(TAG,detailsFragment); 
     return detailsFragment; 
    } 
    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle state) { 
     View view = inflater.inflate(R.layout.fragment_feeddetail, container, false); 
     TextView detail_title=view.findViewById(R.id.detail_title); 
     TextView detail_text=view.findViewById(R.id.detail_text); 
     ImageView detail_image=view.findViewById(R.id.detail_image); 
     TextView detail_name=view.findViewById(R.id.detail_name); 
     TextView detail_desc=view.findViewById(R.id.detail_desc); 
     Log.d(TAG, "Is State Null? " + ((state == null) ? "Yes" : "No")); 
      detail_title.setText(state.getString(KEY_TITLE)); 
      detail_text.setText(state.getString(KEY_TEXT)); 
      requestImage(detail_image,state.getString(KEY_IMAGEURL)); 
      detail_name.setText(state.getString(KEY_NAME)); 
      detail_desc.setText(state.getString(KEY_DESC)); 
     return view; 
    } 
} 

LogCat出力:これは非常に重要です。あなたはこれを見てみたいかもしれません。

09-07 15:53:38.374 14729-14729/io.github.abhirojp.myfeed_android D/MainActivity: Display Details 
09-07 15:53:38.379 14729-14729/io.github.abhirojp.myfeed_android D/FeedDetailsFragment: Is Data Null? No For example: name is John Zeratsky 
09-07 15:53:38.399 14729-14729/io.github.abhirojp.myfeed_android D/FeedDetailsFragment: Is State Null? Yes 
09-07 15:53:38.399 14729-14729/io.github.abhirojp.myfeed_android D/AndroidRuntime: Shutting down VM 
+1

これは間違った使用バンドルです。 'state'の代わりに' getArguments() 'を使用してください。 –

+0

私はそれを調べます。ありがとうございました! :) –

+0

それは正しいです!あなたはそれに答えを加えたいですか?それは将来の初心者に役立つかもしれません。 @ VladMatvienko –

答えて

0

Bundle stateフラグメントに初期データを渡すために使用されていないが、それは破壊され、再作成された後の断片の状態を復元します。

detailsFragment.setArguments(bundle);を使用してBundleをFragmentに設定するので、this.getArguments()を使用してこのデータをフラグメント内に取得する必要があります。

もう1つのオプションは、必要な値に対して単にセッターを使用することです。

+0

ええ、私はそれを混ぜて、別のpuroseのためにそれを使用! –

関連する問題