2016-04-14 6 views
0

なぜそれが起こっているのか理解できないという問題があります。シングルトンメソッドでOnResum(Android)にエラーが発生する

私はフラグメントを持っており、フラグメントに、私は以下のようにresumeメソッドにあります。

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

    System.out.println("number 1"); 

    int s = ((StarterApplication) this.getActivity().getApplication()).getRefreshNotificationVar(); 

    System.out.println("number 2"); 
    s = s + 1; 

    System.out.println("number 3"); 
    ((StarterApplication) this.getActivity().getApplication()).setRefreshNotificationVar(s); 

    System.out.println("number 4"); 
    System.out.println(s); 


} 

そして、私のシングルトンは以下の通りです:

private int refreshNotificationVar; 

public int getRefreshNotificationVar() { 

    System.out.println("check out here"); 
    return refreshNotificationVar; 
} 

public void setRefreshNotificationVar(int refreshNotificationVar) { 
    this.refreshNotificationVar = refreshNotificationVar; 
    System.out.println(refreshNotificationVar+" is my number"); 

} 

そして、私は一度でこのフラグメントを呼び出します以下のような活動を生み出します。これはうまくいきます。シングルトンの方法など。

newsFeedFragment fragment2 = new newsFeedFragment(); 
android.support.v4.app.FragmentTransaction fragmentTransaction2 = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction2.add(R.id.fragment_container, fragment2, "news_feed_fragment"); 
fragmentTransaction2.addToBackStack(null); 
fragmentTransaction2.commit(); 

そして、このフラグメントを次のようなボタンで再度呼び出します。しかしここでは、シングルトンメソッドが起動するときにエラーが発生します。

E/AndroidRuntime: FATAL EXCEPTION: main 
java.lang.IllegalStateException: Could not execute method for android:onClick 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:293) 
    at android.view.View.performClick(View.java:3511) 
    at android.view.View$PerformClick.run(View.java:14105) 
    at android.os.Handler.handleCallback(Handler.java:605) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4424) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.reflect.InvocationTargetException 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    at android.view.View.performClick(View.java:3511) 
    at android.view.View$PerformClick.run(View.java:14105) 
    at android.os.Handler.handleCallback(Handler.java:605) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4424) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 
Caused by: java.lang.NullPointerException 
    at com.my_last.mylast.newsFeedFragment.onResume(newsFeedFragment.java:223) 
    at com.my_last.mylast.MainActivity.go_to_main_view(MainActivity.java:565) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at android.support.v7.app.AppCompatViewInflater$DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288) 
    at android.view.View.performClick(View.java:3511) 
    at android.view.View$PerformClick.run(View.java:14105) 
    at android.os.Handler.handleCallback(Handler.java:605) 
    at android.os.Handler.dispatchMessage(Handler.java:92) 
    at android.os.Looper.loop(Looper.java:137) 
    at android.app.ActivityThread.main(ActivityThread.java:4424) 
    at java.lang.reflect.Method.invokeNative(Native Method) 
    at java.lang.reflect.Method.invoke(Method.java:511) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
    at dalvik.system.NativeStart.main(Native Method) 

ん:

newsFeedFragment fragment = new newsFeedFragment(); 
android.support.v4.app.FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.hide(getSupportFragmentManager().findFragmentById(R.id.fragment_container)); 
fragmentTransaction.hide(getSupportFragmentManager().findFragmentByTag("notifications_fragment")); 
fragmentTransaction.show(getSupportFragmentManager().findFragmentByTag("news_feed_fragment")); 
fragmentTransaction.addToBackStack(null); 
fragmentTransaction.commit(); 
fragment.onResume(); 

初めてのフラグメント負荷は、それが正常に動作しますが、私はフラグメントを示し、手動onResumeメソッドを起動したとき、私は以下のようにエラーを取得するために開始

誰もがこれについて考えている?

+0

223行目のnewsFeedFragment.javaには何がありますか?この行にはNullPointerExceptionがあります –

+0

'this.getActivity()'が 'null'を返していますか? – tianyu

+0

はい、この行は 'int s =((StarterApplication)this.getActivity()。getApplication())。getRefreshNotificationVar();' – saner

答えて

1
@Override 
    public void onActivityCreated(@Nullable Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 
     System.out.println("number 1"); 
     int s = ((MainApplication) this.getActivity().getApplication()).getRefreshNotificationVar(); 
     System.out.println("number 2"); 
     s = s + 1; 
     System.out.println("number 3"); 
     ((MainApplication) this.getActivity().getApplication()).setRefreshNotificationVar(s); 
     System.out.println("number 4"); 
     System.out.println(s); 
    } 

アクティビティインスタンスがnullです。 onresumeの代わりにonActivityCreatedメソッドで同じ操作を行います。上記のコードを参照してください。

+0

Hello Naveenは、フラグメントを表示しながらアクティビティからonResumeを呼び出すので、別の方法ではありません。最初からフラグメント全体をロードするので、onCreateメソッドを呼びたくありません。なぜ私はオンレジュメにエラーを表示していますか?フラグメントが初めてロードされたときにエラーを出すことはありません。 onResumeメソッドは、フラグメントの作成中には正常に処理されますが、その後にonResumeを呼び出すときにエラーが発生します。 – saner

関連する問題