【问题标题】:Why is my app crashing when I set DisplayHomeAsUpEnabled to true?当我将 DisplayHomeAsUpEnabled 设置为 true 时,为什么我的应用程序会崩溃?
【发布时间】:2016-08-03 00:35:08
【问题描述】:

每次运行此活动时,我的应用都会立即崩溃。如果我删除该应用程序运行良好:

    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);

这是我的活动的课程代码:

public class WebActivity extends AppCompatActivity {
private WebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_web);
    mWebView = (WebView) findViewById(R.id.activity_main_webview);
    WebSettings webSettings = mWebView.getSettings();
    webSettings.setJavaScriptEnabled(true);
    mWebView.loadUrl("http://www.example.com/");
    mWebView.setWebViewClient(new MyAppWebViewClient());
    ActionBar actionBar = getActionBar();
    actionBar.setDisplayHomeAsUpEnabled(true);
}

public boolean onOptionsItemSelected(MenuItem item){
    super.onBackPressed();
    return true;
}
}

编辑: 我检查了我的 logcat,这是错误消息:

08-03 09:06:53.952 4650-4650/? E/AndroidRuntime: FATAL EXCEPTION: main
    Process: ca.davesautoservice.davesautoservice, PID: 4650
    java.lang.RuntimeException: Unable to start activity ComponentInfo{ca.davesautoservice.davesautoservice/ca.davesautoservice.davesautoservice.WebActivity}: java.lang.NullPointerException
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2377)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429)
        at android.app.ActivityThread.access$800(ActivityThread.java:151)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:5333)
        at java.lang.reflect.Method.invokeNative(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:515)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644)
        at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.NullPointerException
        at ca.davesautoservice.davesautoservice.WebActivity.onCreate(WebActivity.java:24)
        at android.app.Activity.performCreate(Activity.java:5343)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1088)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2331)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2429) 
        at android.app.ActivityThread.access$800(ActivityThread.java:151) 
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1342) 
        at android.os.Handler.dispatchMessage(Handler.java:110) 
        at android.os.Looper.loop(Looper.java:193) 
        at android.app.ActivityThread.main(ActivityThread.java:5333) 
        at java.lang.reflect.Method.invokeNative(Native Method) 
        at java.lang.reflect.Method.invoke(Method.java:515) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:828) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:644) 
        at dalvik.system.NativeStart.main(Native Method)

我个人认为这里没有什么特别有趣的地方。我唯一注意到的是,当它说:

Caused by: java.lang.NullPointerException
    at ca.davesautoservice.davesautoservice.WebActivity.onCreate(WebActivity.java:24)

它确认是启动操作栏的那一行是问题。

【问题讨论】:

标签: java android android-studio crash android-actionbar


【解决方案1】:

尝试导入android.support.v7.app.ActionBar

并使用:

mActionBar = getSupportActionBar();

确保清单文件中的最低 api 级别高于 11。因为包 android.support.v7.app.ActionBar 仅支持低于 11 的 api 级别。转到清单并更改 API 版本。

【讨论】:

  • 谢谢您,这非常有效。我刚刚将导入从android.app.actionbar 更改为android.support.v7.app.actionbar
【解决方案2】:

因为使用了AppCompatActivity,如果你想使用ActionBar,你应该这样使用:

mActionBar = getSupportActionBar();

【讨论】:

  • 当我使用ActionBar mActionBar = getSupportActionBar(); mActionBar.setDisplayHomeAsUpEnabled(true); 时,第一行出现错误“不兼容的类型。必需:android.app.actionbar 找到:android.supprt.v7.app.actionbar”
  • 不要使用 android.app.actionbar ,应该使用 android.supprt.v7.app.actionbar ,使用这个包。 import android.support.v7.app.ActionBar;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-20
相关资源
最近更新 更多