2017-09-07 7 views
-1

newInstace()에 저장된 내용을 에 가져와야하는 savedInstanceState의 내용을 가져 오려고합니다.저장된 상태가 무효화 됨

문제 : : - 세부 정보를 가져 오려고하면 excpetion이 표시됩니다.

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

나는 savedInstanceState 점점 nullified 또는 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; 
    } 
} 

로그 캣 출력 :이 중요하다. 이것을 보길 원할 것입니다.

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);을 사용하여 조각을 조각으로 설정 했으므로 this.getArguments()을 사용하여 조각 내에서이 데이터를 가져와야합니다.

또 다른 옵션은 필요한 값에 단순히 설정기를 사용하는 것입니다.

+0

그래, 나는 그것을 섞어 다른 purose에 사용! –