我的问题可能与他的相似, Replacing an ActionBar menu item icon with an indeterminate ProgressBar 但问题不同。
我已经能够使用进度条替换操作栏中的刷新按钮,但是当我从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);
}
}
这是preExecute
中的AsyncTask
方法,
@Override
protected void onPreExecute() {
super.onPreExecute();
refreshMenuItem.setActionView(R.layout.actionbar_indeterminate_progress);
}
上面的代码总是给出错误,在StackOverflow上搜索后,我发现在从AsyncTask
设置布局时我必须为类提供正确的上下文,
所以我在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