2017-08-30 15 views
-1

私は自分のアクティビティのすべてのアクションを処理するメインアクティビティにフラグメントを持っています。フラグメントのonResume内のNullPointerException

public class ProjectInfoFragment extends Fragment { 
     private static final String ARG_PID = "pid"; 
     private int projectId; 
     View view; 
     public ProjectInfoFragment() { 
      // Required empty public constructor 
     } 

     public static ProjectInfoFragment newInstance(int pid) { 
      ProjectInfoFragment fragment = new ProjectInfoFragment(); 
      Bundle args = new Bundle(); 
      args.putInt(ARG_PID, pid); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      if (getArguments() != null) { 
       projectId = getArguments().getInt(ARG_PID); 
      } 
     } 

     @Override 
     public void onResume() { 
      super.onResume(); 
      mainAction(); 
     } 

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

     private void mainAction() { 
      ProjectModel projectModel = new ProjectModel(getContext()); 
      if (!projectModel.findByKey(projectId + "")) { //// line 121 
      //!!!!!!! here NullPointerException occurs !!!!!! 
       return; 
      } 
     } 

    } 

重要な注意:私はonResume(で行わなければなりませんmainAction()で多くのことをやって)と私ができる」

フラグメントコード:

はめったにNullPointerExceptionが、私はフラグメントのプロパティを使用する場合、発生しませんcreateViewや他の関数でこれを行います。

ログ:

java.lang.NullPointerException: Attempt to invoke virtual method boolean ir.rabint.shahta.model.ProjectModel.findByKey(java.lang.String) on a null object referencen 
    at ir.rabint.shahta.activity.fragment.ProjectInfoFragment.mainAction(ProjectInfoFragment.java:121) 
    at ir.rabint.shahta.activity.fragment.ProjectInfoFragment.onResume(ProjectInfoFragment.java:92) 
    at android.support.v4.app.Fragment.performResume(Fragment.java:2238) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1346) 
    at android.support.v4.app.FragmentManagerImpl.moveFragmentToExpectedState(FragmentManager.java:1528) 
    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1595) 
    at android.support.v4.app.BackStackRecord.uteOps(BackStackRecord.java:758) 
    at android.support.v4.app.FragmentManagerImpl.uteOps(FragmentManager.java:2363) 
    at android.support.v4.app.FragmentManagerImpl.uteOpsTogether(FragmentManager.java:2149) 
    at android.support.v4.app.FragmentManagerImpl.optimizeAnduteOps(FragmentManager.java:2103) 
    at android.support.v4.app.FragmentManagerImpl.PendingActions(FragmentManager.java:2013) 
    at android.support.v4.app.FragmentManagerImpl$1.run(FragmentManager.java:710) 
    at android.os.Handler.handleCallback(Handler.java:836) 
    at android.os.Handler.dispatchMessage(Handler.java:103) 
    at android.os.Looper.loop(Looper.java:203) 
    at android.app.ActivityThread.main(ActivityThread.java:6247) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) 
+0

ログを添付できますか? projectIdはプリミティブ型なので、nullポインタ例外があるとは思われません。 – Raz

+0

ログを添付できますか? –

+0

アタッチログとprojectIdは、最初は0に初期化されるため、nullにできません。そのプリミティブ型 –

答えて

0

!オペレータがBooleanデータタイプ/方法でのみ動作します。ここでは、スタックトレースに記述されているように文字列を比較しています。 次のようにする

if(projectModel != null){ 
    if(!projectModel.findByKey(projectId + "").equals("")){ 
    return; 
    } 
}else{ 
//do whatever you want 
} 
+0

私は 'if(projectModel.findByKey(projectId +" ")== null)'に変更する方が簡単だと思います。ヌルに 'equals'を呼び出そうとしているので、あなたのコードはまだNPEを投げます。 – Syex

+0

編集しました:) – Dennis

+0

まだNPEを投げます:Pコードの問題は、 'projectModel.findByKey(projectId +" ")'は 'null'を返すので、' equals'を呼び出すことはできません。 – Syex

関連する問題