从适配器 class 调用方法时出错。 java.lang.IllegalStateException: 系统服务在 onCreate() 之前对 Activity 不可用

Getting Error while call a method from adapter class. java.lang.IllegalStateException: System services not available to Activities before onCreate()

当我尝试从我的适配器 class 调用一个方法时,我收到一个错误系统服务在 onCreate();

之前对 Activity 不可用

MainTask.Class

public class MainTask extends AppCompatActivity  {
    public static final String mypreference = "mypref";
    public static String Name = "nameKey";
    SharedPreferences taskcount, currenttime;
    public static int completask;
    long shared_time;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_task);
             Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
       setupViewPager(viewPager);

        TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
        tabLayout.setupWithViewPager(viewPager);//setting tab over viewpager

        taskcount = getSharedPreferences(mypreference,
                MainActivity.MODE_PRIVATE);
        completask = taskcount.getInt(Name, 0);

    }
public void propertask(){
    final NiftyDialogBuilder dialog1 = NiftyDialogBuilder.getInstance(MainTask.this);
    Effectstype effect;
    effect = Effectstype.SlideBottom;
    dialog1.setCancelable(false);
    dialog1.isCancelableOnTouchOutside(false)
            .withTitle(null)
            .withMessage(null)
            .withEffect(effect)
            .setCustomView(R.layout.proper_task, MainTask.this)
            .show();


    Button rate = (Button) dialog1.findViewById(R.id.rate_button);


    rate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            dialog1.dismiss();

        }
    });
    dialog1.show();
}

GridListAdapter.Java

 if(taskvalue==0)
     {
   MainTask mainTask=new MainTask();
   mainTask.propertask();

  }

请帮助我,如何从我的适配器访问 propertask 方法 class。 提前致谢。

永远不要 自己创建一个 activity 的实例(MainTask mainTask=new MainTask() 在你的代码中)。活动由框架创建,以响应 startActivity() 调用。

因为 GridListAdapter 似乎在 MainTask 以外的某些 class 中使用,也许 propertask() 应该是 GridListAdapter 或 activity 或显示 GridListAdapter.

的片段

您可以将propertask 方法移动到GridListAdapter 中。比您需要此方法的 MainTask Activity 上下文。

您不必为 Activity 创建对象。事实上 CommonsWare 所说的你不应该这样做。

你可以像这样调用那个函数

if(taskvalue==0)
 {
  // assuming you have passed context to your adapter. If not, then do it.
  ((MainTask)context).propertask();

 }

编辑: 正如您在评论中所说 "you do not have context so you couldn't made Dialog from Adapter"。但是既然你已经通过了它,你现在可以从你的适配器中完成它并删除这个不必要的强制转换为 activity 函数调用。