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菜单
中分配了一个值。这就是为什么它是空的。