Java 将AsyncTask中的ActionBar刷新按钮替换为不确定进度条

Java 将AsyncTask中的ActionBar刷新按钮替换为不确定进度条,java,android,android-asynctask,Java,Android,Android Asynctask,我的问题可能和他相似, 但问题不同 我已经能够用进度条替换操作栏中的刷新按钮,但是当我从onPreExecute类的AsyncTask方法尝试它时,我总是得到NullPointerException错误 这是我的密码 @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.desc_xml, menu); refreshMenu

我的问题可能和他相似, 但问题不同

我已经能够用进度条替换操作栏中的刷新按钮,但是当我从
onPreExecute
类的
AsyncTask
方法尝试它时,我总是得到
NullPointerException
错误

这是我的密码

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.desc_xml, menu);


        refreshMenuItem = menu.findItem(R.id.action_refresh);

        return true;
    }

@Override

public boolean onOptionsItemSelected(MenuItem item) {

    switch (item.getItemId()) {


    case R.id.action_refresh:
        new GetDesc().execute();
        return true;


    default:
        return super.onOptionsItemSelected(item);
    }
}
这是我在
AsyncTask
中的
preExecute
方法

@Override
        protected void onPreExecute() {
            super.onPreExecute();
            refreshMenuItem.setActionView(R.layout.actionbar_indeterminate_progress);

        }
上面的代码总是给出错误,在搜索StackOverflow之后,我知道在从
AsyncTask
设置布局时,我必须为类提供正确的上下文

@Override
        protected void onPreExecute() {
            super.onPreExecute();
            refreshMenuItem.setActionView(R.layout.actionbar_indeterminate_progress);

        }
所以我在onPreExecute中尝试了这个

myclass.this.refreshMenuItem.setActionView(R.layout.actionbar_indeterminate_progress);
但这也会产生同样的错误。 所以我试过这个

    refreshMenuItem.setActionView(com.abc.myproject.R.layout.actionbar_indeterminate_progress);
但我还是犯了同样的错误

为什么即使我提供了上下文,仍然会出现相同的错误

这是logcat输出

): FATAL EXCEPTION: main
): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myproject.abc java.lang.NullPointerException
):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
):  at android.os.Handler.dispatchMessage(Handler.java:99)
):  at android.os.Looper.loop(Looper.java:137)
):  at android.app.ActivityThread.main(ActivityThread.java:5041)
):  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:793)
):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
):  at dalvik.system.NativeStart.main(Native Method)
): Caused by: java.lang.NullPointerException
):  at $GetDesc.onPreExecute(NewsDetails.java:105)
):  at android.os.AsyncTask.executeOnExecutor(AsyncTask.java:586)
):  at android.os.AsyncTask.execute(AsyncTask.java:534)
):  at .onCreate(NewsDetails.java:40)
):  at android.app.Activity.performCreate(Activity.java:5104)
):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
):  ... 11 more

似乎
refreshMenuItem
在此阶段为空。用调试器检查它。我知道,我知道它是空的,这就是我得到错误的原因。但是我不知道为什么它是空的?
onCreate
方法在
oncreateoptions菜单
之前被调用,并且您的
refreshMenuItem
变量在
oncreateoptions菜单
中分配了一个值。这就是为什么它是空的。