Java 应用程序在emulator中启动时崩溃

Java 应用程序在emulator中启动时崩溃,java,android,crash,Java,Android,Crash,我是android开发的新手,我正在尝试为我班上的一个项目构建一种图书列表应用程序。这位教授最喜欢的座右铭是“不管你不知道什么,用谷歌搜索它”。当你不知道该做什么的时候,这并不坏,但因为我们正在学习java和android开发,这并没有什么帮助,因为java看起来有点陌生 无论如何,将我的应用程序建立在联系人应用程序中这就是我的主要活动的外观 //MainActivity.java package com.iekproject.siegfried.libraryapp; import andr

我是android开发的新手,我正在尝试为我班上的一个项目构建一种图书列表应用程序。这位教授最喜欢的座右铭是“不管你不知道什么,用谷歌搜索它”。当你不知道该做什么的时候,这并不坏,但因为我们正在学习java和android开发,这并没有什么帮助,因为java看起来有点陌生

无论如何,将我的应用程序建立在联系人应用程序中这就是我的主要活动的外观

//MainActivity.java
package com.iekproject.siegfried.libraryapp;

import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.support.v4.app.FragmentTransaction;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;

public class MainActivity extends AppCompatActivity
   implements LibraryFragment.LibraryFragmentListener, DetailFragment.DetailFragmentListener,
    AddEditFragment.AddEditFragmentListener {

//key for storing a book's Uri in a Bundle passed to a fragment
public static final String BOOK_URI = "book_uri";

private LibraryFragment libraryFragment; //displays library aka book list

//displays LibraryFragment when MainActivity first loads
@Override
protected void onCreate(Bundle savedInstanceState) {

   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
   Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
   setSupportActionBar(toolbar);

    //if layout contains fragmentContainer, the phone layout is in use. Create and display
    //a LibraryFragment
    if (savedInstanceState == null && findViewById(R.id.fragmentContainer) != null) {
        //create LibraryFragment
        libraryFragment = new LibraryFragment();

        //add the fragment to the FrameLayout
        FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
        transaction.add(R.id.fragmentContainer, libraryFragment);
        transaction.commit(); //displays LibraryFragment
    }
    else {
        libraryFragment =
                (LibraryFragment) getSupportFragmentManager().
                        findFragmentById(R.id.DetailFragment);
    }
}

public boolean isExternalStorageReadable() {
    String state = Environment.getExternalStorageState();
    if (Environment.MEDIA_MOUNTED.equals(state) ||
            Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) {
        return true;
    }
    return false;
}

//displays DetailFragment for selected book
@Override
public void onBookSelected(Uri bookUri) {
        getSupportFragmentManager().popBackStack();
        displayBook(bookUri, R.id.rightPaneContainer);
}

//displays AddEditFragment to add a new book. Possibly what I'll also have to change to make it
//scan/update the book list
@Override
public void onAddBook() {
        displayAddEditFragment(R.id.rightPaneContainer, null);
}

//displays a book
private void displayBook(Uri bookUri, int viewID) {
    DetailFragment detailFragment = new DetailFragment();

    //specify book's Uri as an argument to the DetailFragment
    Bundle arguments = new Bundle();
    arguments.putParcelable(BOOK_URI, bookUri);
    detailFragment.setArguments(arguments);

    //use a FragmentTransaction to display the DetailFragment
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(viewID, detailFragment);
    transaction.addToBackStack(null);
    transaction.commit(); //causes DetailFragment to display
}

//displays fragment for adding new or editing existing book
private void displayAddEditFragment(int viewID, Uri bookUri) {
    AddEditFragment addEditFragment = new AddEditFragment();

    //if editing existing book, provide bookUri as an argument
    if (bookUri != null) {
        Bundle arguments = new Bundle();
        arguments.putParcelable(BOOK_URI, bookUri);
        addEditFragment.setArguments(arguments);
    }

    //use a FragmentTransaction to display the AddEditFragment
    FragmentTransaction transaction =
            getSupportFragmentManager().beginTransaction();
    transaction.replace(viewID, addEditFragment);
    transaction.addToBackStack(null);
    transaction.commit(); //causes AddEditFragment to display
}

//return to book list when displayed book deleted
@Override
public void onBookDeleted() {
    //removes top of back stack
    getSupportFragmentManager().popBackStack();
    libraryFragment.updateLibrary(); //refresh book list
}

//displays the AddEditFragment to edit an existing book. Maybe it can be used as Move or sth
/*@Override
public void onEditBook(Uri bookUri) {
    displayAddEditFragment(R.id.rightPaneContainer, bookUri);
}*/

//update GUI after the new book or updated book saved
@Override
public void onAddEditCompleted(Uri bookUri) {
    //removes top of back stack
    getSupportFragmentManager().popBackStack();
    libraryFragment.updateLibrary(); //refresh book list

    if (findViewById(R.id.fragmentContainer) == null){ //tablet
        //removes top of back stack
        getSupportFragmentManager().popBackStack();

        //on tablet, displays the book that was just added or edited
        displayBook(bookUri, R.id.rightPaneContainer);
    }
  }
}
这是logcat

04-12 16:14:38.807 5796-5796/? I/art: Not late-enabling -Xcheck:jni (already on)
04-12 16:14:38.808 5796-5796/? W/art: Unexpected CPU variant for X86 using defaults: x86
04-12 16:14:38.926 5796-5796/com.iekproject.siegfried.libraryapp W/System: ClassLoader referenced unknown path: /data/app/com.iekproject.siegfried.libraryapp-1/lib/x86
04-12 16:14:38.945 5796-5796/com.iekproject.siegfried.libraryapp I/InstantRun: starting instant run server: is main process
04-12 16:14:38.991 5796-5796/com.iekproject.siegfried.libraryapp W/art: Before Android 4.1, method android.graphics.PorterDuffColorFilter android.support.graphics.drawable.VectorDrawableCompat.updateTintFilter(android.graphics.PorterDuffColorFilter, android.content.res.ColorStateList, android.graphics.PorterDuff$Mode) would have incorrectly overridden the package-private method in android.graphics.drawable.Drawable
04-12 16:14:39.119 5796-5796/com.iekproject.siegfried.libraryapp D/AndroidRuntime: Shutting down VM
04-12 16:14:39.119 5796-5796/com.iekproject.siegfried.libraryapp E/AndroidRuntime: FATAL EXCEPTION: main
                                                                                   Process: com.iekproject.siegfried.libraryapp, PID: 5796
                                                                                   java.lang.RuntimeException: Unable to start activity ComponentInfo{com.iekproject.siegfried.libraryapp/com.iekproject.siegfried.libraryapp.MainActivity}: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
                                                                                       at android.app.ActivityThread.-wrap12(ActivityThread.java)
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                                       at android.os.Looper.loop(Looper.java:154)
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:6119)
                                                                                       at java.lang.reflect.Method.invoke(Native Method)
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
                                                                                    Caused by: java.lang.IllegalStateException: This Activity already has an action bar supplied by the window decor. Do not request Window.FEATURE_SUPPORT_ACTION_BAR and set windowActionBar to false in your theme to use a Toolbar instead.
                                                                                       at android.support.v7.app.AppCompatDelegateImplV9.setSupportActionBar(AppCompatDelegateImplV9.java:207)
                                                                                       at android.support.v7.app.AppCompatActivity.setSupportActionBar(AppCompatActivity.java:130)
                                                                                       at com.iekproject.siegfried.libraryapp.MainActivity.onCreate(MainActivity.java:30)
                                                                                       at android.app.Activity.performCreate(Activity.java:6679)
                                                                                       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
                                                                                       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2618)
                                                                                       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726) 
                                                                                       at android.app.ActivityThread.-wrap12(ActivityThread.java) 
                                                                                       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477) 
                                                                                       at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                                       at android.os.Looper.loop(Looper.java:154) 
                                                                                       at android.app.ActivityThread.main(ActivityThread.java:6119) 
                                                                                       at java.lang.reflect.Method.invoke(Native Method) 
                                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886) 
                                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776) 

非常感谢您的帮助

您只需在设置工具栏后设置内容视图即可。你可以这样写:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setContentView(R.layout.activity_main);

应用程序正在崩溃,因为您先设置视图,然后再设置工具栏。

设置工具栏后,只需设置内容视图即可。你可以这样写:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setContentView(R.layout.activity_main);

应用程序正在崩溃,因为您先设置视图,然后再设置工具栏。

从您的LC:
不要请求窗口。功能\u支持\u操作\u栏并在主题中将windowActionBar设置为false,以使用工具栏。
谢谢。修正了,但它仍然崩溃。。。编辑:必须删除工具栏=(Toolbar)findviewbyd(R.id.Toolbar);设置支持操作栏(工具栏);这就成功了,谢谢你!!!你找到了。不用谢我。坚持下去,伙计。加1.从您的LC:
不要请求Window.FEATURE\u SUPPORT\u ACTION\u BAR,并在主题中将windowActionBar设置为false以使用工具栏。
谢谢。修正了,但它仍然崩溃。。。编辑:必须删除工具栏=(Toolbar)findviewbyd(R.id.Toolbar);设置支持操作栏(工具栏);这就成功了,谢谢你!!!你找到了。不用谢我。坚持下去,伙计。加1。