Singleton方法在OnResum中导致错误(Android) [英] Singleton Method Gives Error in OnResum (Android)

查看:176
本文介绍了Singleton方法在OnResum中导致错误(Android)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,我不明白为什么会发生。



我有一个片段,在片段中我有如下恢复方法:

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

System.out.println(number 1);
$ b $ 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 +是我的号码);


我在活动的创建阶段调用这个片段一次如下所示,这工作正常。

  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();

然后我用下面的按钮再次调用这个片段。但是在这里,我开始在单例方法开始时得到错误。

  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方法,我开始得到如下错误:

  E / AndroidRuntime:致命例外:main 
java.lang.IllegalStateException:无法在android.view.v7.app.AppCompatViewInflater上执行android:onClick
的方法$ 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)$ b $ 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(本地方法)
由java.lang.reflect.InvocationTargetException引起的$ b $在java.lang.reflect.Method.invokeNative(本地方法)$ b $在java.lang.reflect.Method.invoke( (android.view.java:3511)
在android.support.v7.app.AppCompatViewInflater $ DeclaredOnClickListener.onClick(AppCompatViewInflater.java:288)
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)
在java.lang.reflect.Method.invokeNative(Native方法)$ b $在java.lang.reflect.Method.invoke(Method.java:5 11)
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)
引起:java.lang.NullPointerException
at com.my_last.mylast.newsFeedFragment.onResume(newsFeedFragment.java:223)
在com.my_last.mylast.MainActivity.go_to_main_view(MainActivity.java:565)
在java.lang.reflect.Method.invokeNative(本地方法)
在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)
在android.os.Looper.loop(Looper.java:13 7)
在android.app.ActivityThread.main(ActivityThread.java:4424)
在java.lang.reflect.Method.invokeNative(本地方法)$ b $在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。 (ZygoteInit.java:551)
at dalvik.system.NativeStart.main(Native Method)



b 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);
}

看起来像活动实例是空的。而不是onresume在onActivityCreated方法上做同样的操作。请参考上面的代码。


I have a problem that I could not understand why it is happening.

I have a fragment, and in the fragment I have the on resume method as below:

@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);


}

And my singletons are as below:

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");

}

And I call this fragment once in the oncreate of the activity as below, which works fine. The singleton methods and else.

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();

And I call this fragment again with a button as below. However here I start to get the error when the singleton method starts.

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();

When the fragment loads for the first time, it works fine, but when I show the fragment and start the onResume method manually, I start to get the error as below:

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) 

Does anyone has any idea about this?

解决方案

    @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);
    }

Looks Like Activity Instance is null . Instead of onresume do the same operation on onActivityCreated Method . Please refer the above code.

这篇关于Singleton方法在OnResum中导致错误(Android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆